在Woocommerce中检查并显示所有具有SKU的订单商品

时间:2018-11-30 15:35:58

标签: php wordpress woocommerce product orders

自定义脚本存在问题,无法在Woocommerce>管理>订单屏幕中显示SKU。我似乎无法向SKU展示

尝试

        switch ( $column )
    {
  case 'my_custom_column' :
  $the_sku = get_post_meta( $post_id, '_sku' )

然后,如果该商品没有SKU,则以后我会使用类似的东西显示一条错误消息(对我自己)。

if(!empty($the_sku)) {
     echo "<a href=''><div class='order_div'>SKU is".$the_sku."</div></a>";
} else {
    echo "<a href=''><div class='order_div'>NO SKU</div></a>";
}

但是它似乎不起作用。它甚至不会回显SKU(如果存在)。所以我有点卡住了。理想情况下,我尝试检查订单中的每个项目(一个订单可能附加了多个项目)是否都有自己的SKU。

如果不存在SKU,则会在“订单”列中显示错误。任何帮助都非常欢迎。

1 个答案:

答案 0 :(得分:3)

Sku与订单无关,而是与订单项(产品)相关,并且订单可以包含许多项目,因此您需要使用其他内容。

以下代码将获取并检查订单商品以获取SKU,如果有产品不存在,它将显示缺少的SKU数量:

switch ( $column ) {
    case 'my_custom_column' :

        // Get the WC_Order instance object
        $order = wc_get_order( $post_id );
        $has_sku = false;
        $skus = [];
        $missing = 0;

        // Loop through order items
        foreach( $order->get_items() as $item ){
            // Get the WC_Product object (from order item)
            $product = $item->get_product();

            if( $sku = $product->get_sku() ) {
                $has_sku = true;
                $skus[] = $sku;
            } else {
                $missing++;
            }
        }

然后再来

echo '<a href=""><div class="order_div">';

if ( $has_sku ) {
    echo __( "SKUs: %s") . ' ' . implode( ', ', $skus );
} else {
    echo __( "NO SKU" );
}

// Display missing SKUs count (optionally)
if( $missing > 0 ){
    echo ' <em>(' . $missing . ' missing)</em>';
}

echo '</div></a>';

现在应该可以工作。