当前位置: 首页 > 知识库问答 >
问题:

无法从woocommerce中使用products属性筛选的订单中获取变体属性

邢承弼
2023-03-14

在woocommerce my-account中,我想显示与一个变体属性相关的所有销售。在我的例子中,属性是艺人名称。我想显示与艺术家相关的每个产品的每个订单的尺寸/数量和买家名称。如果size为空,我想检索包含我添加的size的variation_sku。

我开始使用这个函数从Woocommerce中的产品ID获取所有订单ID

function retrieve_orders_ids_from_a_product_id( $product_id ) {
    global $wpdb;

    // Define HERE the orders status to include in  <==  <==  <==  <==  <==  <==  <==
    $orders_statuses = "'wc-completed'";
    //$orders_statuses = "'wc-completed', 'wc-processing', 'wc-on-hold'";

    # Get All defined statuses Orders IDs for a defined product ID (or variation ID)
    return $wpdb->get_col( "
            SELECT DISTINCT woi.order_id
            FROM {$wpdb->prefix}woocommerce_order_itemmeta as woim, 
                     {$wpdb->prefix}woocommerce_order_items as woi, 
                     {$wpdb->prefix}posts as p
            WHERE  woi.order_item_id = woim.order_item_id
            AND woi.order_id = p.ID
            AND p.post_status IN ( $orders_statuses )
            AND woim.meta_key IN ( '_product_id', '_variation_id' )
            AND woim.meta_value LIKE '$product_id'
            ORDER BY woi.order_item_id DESC"
    );
}

结果是相当好的90%的情况下,除了一些订单。“variation_id”为空,但存在变体属性,但我无法显示它们。(如pa_size或variation-sku,也包含大小)

下面是工作代码

$artisteTag = "artiste-stack";                  
$args = array( 
        'post_type'      => 'product', 
        'posts_per_page' => 99, // dont need pagination
        'product_tag'    => $artisteTag  
        );

// Loop for all products with $artistTag related
$loop = new WP_Query( $args );

// how much product do we have
$product_count = $loop->post_count;

// If have products
if( $product_count > 0 )
    {
    echo "Nombre de Collaborations : ".$product_count."<br>";
    echo "<div class='collabs'>";
    // for each product show orders related
    while ( $loop->have_posts() ) : 
        $loop->the_post(); 
        global $product;
        global $post;
        $productID = $product->get_id();
        $thePostID = $post->post_title;
        $orders_ids_array = retrieve_orders_ids_from_a_product_id( $productID );
        // Show "x" orders for "product name" with "cat_name"
        echo "<p>Il y a ".count($orders_ids_array)." ventes pour : ".$thePostID." (productID = ".$productID.") - ";
        $terms = get_the_terms ( $productID, 'product_cat' );
        foreach ( $terms as $term ) 
            {
            $cat_id = $term->id;
            $cat_name = $term->name;
            $cat_slug = $term->slug;
            $cat_description = $term->description;
            $cat_count = $term->count;  
            echo $cat_name."</p>";  
            }
        // Loop on the orders 
        foreach($orders_ids_array as $order_id){
            $order = wc_get_order($order_id);
            $order_data = $order->get_data();
            //var_dump($order_data);
            $order_date_created = $order_data['date_created']->date('Y-m-d H:i:s');
            $order_billing_first_name = $order_data['billing']['first_name'];
            $order_billing_last_name = $order_data['billing']['last_name'];
            // show some infos from the order
            echo "<div class='order'>";

            echo "<p>Commande ".$order_id." faite le ".$order_date_created." par ".$order_billing_first_name." ".$order_billing_last_name."</p>";

            echo "<ul>";
            foreach ($order->get_items() as $item_key => $item ):
                //var_dump($item);
                $order_product_id   = $item->get_product_id();
                $item_name              = $item->get_name();
                $quantity               = $item->get_quantity();
                $variation_id           = $item->get_variation_id();

             // Need something like $variation_sku = $get_variations_sku($product_id);
                $variation_size     = get_post_meta( $variation_id, 'attribute_pa_taille', true);
// only want to show the product related to the artist and not the total order details
                if($order_product_id === $productID )
                    {
                    echo "<li>".$item_name." (order_product_id = ".$order_product_id.") (variation_id = ".$variation_id.") Quantité = ".$quantity."</li>";
                    if ($variation_id) 
                        { 
                        echo $variation_size; // works for 90% of case
                        } 
                    else 
                        {

                        // echo $variation_sku;   
                        echo "variation_id is empty but if we show var_dump($item) we can find size in all the data;";
                        }
                    }
            endforeach;
            echo "</ul>";

        echo "</div>";
        }
    endwhile;
    echo "</div>";
    }

        }
    }

关于在哪里使用variation_sku..进行挖掘的任何帮助都没有找到任何有关此工作的内容。

共有1个答案

花永昌
2023-03-14

我找到了解决办法

echo wc_display_item_meta( $item ); 

如果variation_id为空,将返回good size属性!

 类似资料:
  • 我试图获得变量product属性的名称,在购物车中,但有些东西不对。我不明白当一个对象被保护时,我怎么能得到变异值 这是$product中对象reurns的一部分

  • Beans文件: 在BaseTest中,当调用)方法时,属性文件中的值起作用,但如果试图将该值用作中的变量,则该值为空。你能帮帮我吗?

  • 问题内容: 我有一个具有多个属性的核心数据实体,并且想要一个属性中所有对象的列表。我的代码如下所示: 但这给了我一个NSException错误,我不知道为什么,或者我应该怎么做。我已经阅读了NSFetchRequest类的描述,但从中讲不出来。 任何建议,将不胜感激。 编辑:从Bluehound获得提示后,我将代码更改为: 运行时错误消失了,但我仍然不知道它是否有效,因为我不确定如何将列表转换为字

  • 我正在尝试使用JAXB读取一个xml。 我正面临一个奇怪的问题,其中父类的属性没有被读取,但子类的属性被读取。我参考了论坛,但这似乎是一个奇怪的论坛。 谁能告诉我我犯了什么错误。 XML。 电话目录类 电话号码类 主类 输出 如您所见,尽管提到了字段的XMLAt⃣注释,但exchange eName为null。 谢谢,毗湿奴

  • 在Woocommerce中,您可以添加全局产品属性和术语。例如: 这是独立于产品的。然后可以从产品的预定义属性中进行选择。 我需要用php获取属性中的所有术语。因此,选择所需的属性,例如size,然后返回一个数组,其中包括。 看起来很简单,但我找不到任何帮助。

  • 问题内容: 如何列出基于特定产品变型的订单商品? 给定一个 变体ID ,我想生成一个包含该特定变体的所有 订单商品 的列表。 就我而言,我使用变体表示日期,并且产品本身是重复发生的事件,因此,此操作的目的是列出参加该特定日期的人员。 如果可以通过简单的用法(例如使用)或类似的方法来完成此操作,那将是令人惊讶的,但是否则我猜想自定义查询将是这种方式。 我只是似乎无法弄清楚在这种情况下表格是如何关联的