如何在订单收到页面和电子邮件订单

时间:2017-09-08 13:42:28

标签: php wordpress woocommerce product orders

在functions.php中

add_action( 'woocommerce_add_order_item_meta', 'custom_add_item_sku', 10, 3 );
function custom_add_item_sku( $item_id, $values, $cart_item_key ) {

 $item_sku = get_post_meta( $values[ 'product_id' ], '_sku', true );

 wc_add_order_item_meta( $item_id, 'SKU', $item_sku , false );

}

但它显示SKU值低于产品标题,但我希望它像这样

  
    

SKU:123sd - 产品名称

  

2 个答案:

答案 0 :(得分:2)

  

更新2018-04-01 - 更改挂钩和改进的代码。

请改用woocommerce_order_item_name过滤器钩子。我在您的代码中进行了一些更改:

add_filter( 'woocommerce_order_item_name', 'sku_before_order_item_name', 30, 3 );
function sku_before_order_item_name( $item_name, $item, $is_visible ) {
    $product = $item->get_product();
    $sku = $product->get_sku();

    // When sku doesn't exist we exit
    if( empty( $sku ) ) return $item_name;

    $sku_text = __( 'SKU', 'woocommerce' ) . ': ' . $sku;

    // Add product permalink when argument $is_visible is true
    $product_permalink =  $is_visible ? $product->get_permalink( $item ) : '';

    if( $product_permalink )
        return sprintf( '<a href="%s">%s - %s</a>', $product_permalink, $sku_text, $item->get_name() );
    else
        return $sku_text . ' - ' . $item->get_name();
}

代码放在活动子主题(或主题)的function.php文件中,或者放在任何插件文件中。

在WooCommerce 3+中测试并且有效。

在购物车商品名称​​中显示SKU(已更新:包含购物车页面的链接)

add_filter( 'woocommerce_cart_item_name', 'sku_before_cart_item_name', 10, 3 );
function sku_before_cart_item_name( $product_name, $cart_item, $cart_item_key ) {
    $product =  $cart_item['data'];
    $sku = $product->get_sku();

    // When sku doesn't exist we exit
    if( empty( $sku ) ) return $product_name;

    $sku_text = __( 'SKU', 'woocommerce' ) . ': ' . $sku;
    $product_permalink = $product->get_permalink( $cart_item );

    if ( is_cart() )
        return sprintf( '<a href="%s">%s - %s</a>', esc_url( $product_permalink ), $sku_text, $product->get_name() );
    else
        return $sku_text . ' - ' . $product_name;
}

代码放在活动子主题(或主题)的function.php文件中,或者放在任何插件文件中。

在WooCommerce 3+中测试并且有效。

答案 1 :(得分:0)

我会将钩子更改为'woocommerce_new_order_item',因为似乎'woocommerce_add_order_item_meta'可能存在一些弃用问题

这样的东西应该在SKU之后添加名称,但我不知道这是否正是你正在寻找的。

    add_action( 'woocommerce_new_order_item', 'custom_add_item_sku', 10, 3 );
    function custom_add_item_sku( $item_id, $values, $cart_item_key ) {
     $item_sku = get_post_meta( $values[ 'product_id' ], '_sku', true );
     $name = = $values['name'];
     wc_add_order_item_meta( $item_id, 'SKU', $item_sku . ' - ' . $name , false );
    }