在Woocommerce管理订单页面(发货部分)中用SKU替换产品名称

时间:2019-05-03 02:38:30

标签: php woocommerce admin orders

我只想在Woocommerce->订单->订单明细(位于发运部分的WordPress后台管理中)中用SKU替换产品名称。

sku instead of product name in shipping section

我尝试了以下代码,但是没有用。我不懂PHP。

add_filter( 'woocommerce_order_item_shipping_get_name', 'filter_order_item_shipping_get_name', 10, 2 );
function filter_order_item_shipping_get_name( $item_name, $order_item ) {
    if ( is_admin() && $order_item->is_type('line_item') ) {
        $product = $order_item->get_product();

        if( $sku = $product->get_sku() ) {
            $item_name = $sku;
        }
    }
    return $item_name;
}

是否只有在WordPress后台管理中的Woocommerce->订单->订单详细信息运送部分中,才能知道用SKU替换产品名称的正确代码?

如何解决此问题?

1 个答案:

答案 0 :(得分:1)

您要使用的过滤器是woocommerce_order_item_display_meta_value。它具有3个参数,第三个参数是您希望挂接的地方的运输对象。您测试其类型为'shipping',以确保不修改其他区域。接下来,您必须获取父订单对象,从中获取订单商品对象,然后遍历它们以构建输出字符串。

add_filter( 'woocommerce_order_item_display_meta_value', 'filter_order_item_display_meta_value', 10, 3 );
function filter_order_item_display_meta_value( $meta_value, $meta_object, $order_item ) {

    if ( is_admin() && $order_item->is_type('shipping') ) {

        $meta_values = [];
        $order = $order_item->get_order();
        $order_items = $order->get_items();

        foreach( $order_items as $order_item ){

            $quantity   = $order_item->get_quantity();
            $product    = $order_item->get_product();
            $sku        = $product->get_sku();
            $name       = $product->get_name();

            if( $sku ) {
                $meta_values[] = $sku . ' × ' . $quantity;
            } else {
                $meta_values[] = $name . ' × ' . $quantity;
            }
        }

        return implode( ', ', $meta_values );

    }

    return $meta_value;
}