在 WooCommerce 订单电子邮件的项目名称前添加增量编号

问题描述

我有一家 WooCommerce 商店,一切正常。但我想在下订单时在每个商品名称添加一个数字,这样我就可以在盒子上添加数字,以便客户知道哪个盒子包含什么产品。

(我只有 1 个产品,但客户可以使用很多产品选项自定义该产品)

示例:在订单电子邮件中,产品名称保持不变,但在名称前放置了一个递增的数字。

  1. 产品
  2. 产品
  3. 产品

我使用此代码编辑产品名称

add_filter( 'woocommerce_order_item_name','change_orders_items_names',10,1 );

function change_orders_items_names( $item_name ) {
    $item_name = 'mydesiredproductname';
    return $item_name;
}

但是我不知道如何在产品名称添加一个增量编号。

有人知道怎么做吗?或者可以指出我正确的方向?

解决方法

woocommerce_order_item_name 过滤器钩子被多次调用, 因此很难在函数本身中添加数字。

通过 woocommerce_checkout_create_order,我们首先为每个 meta_data 添加数字作为 $item。然后通过 get_meta,我们在产品名称前添加编号。

所以你得到:

function action_woocommerce_checkout_create_order( $order,$data ) {    
    // Start number
    $number = 1;
    
    // Loop through order items
    foreach ( $order->get_items() as $item_key => $item ) {
        // Update meta data for each item
        $item->update_meta_data( '_product_number',$number );
    
        // Number +1
        $number = $number + 1;
    }
}
add_action( 'woocommerce_checkout_create_order','action_woocommerce_checkout_create_order',10,2 );

function filter_woocommerce_order_item_name( $item_name,$item ) {  
    // Get meta
    $product_number = $item->get_meta( '_product_number' );
    
    // NOT empty
    if ( ! empty ( $product_number ) ) {
        $item_name = $product_number . '. ' . $item_name; 
    }

    return $item_name;
}
add_filter( 'woocommerce_order_item_name','filter_woocommerce_order_item_name',2 );

注意:添加 is_wc_endpoint_url,仅将其应用于电子邮件通知。

function filter_woocommerce_order_item_name( $item_name,$item ) {
    // Only for email notifications
    if ( is_wc_endpoint_url() ) 
        return $item_name;

    // Get meta
    $product_number = $item->get_meta( '_product_number' );
    
    // NOT empty
    if ( ! empty ( $product_number ) ) {
        $item_name = $product_number . '. ' . $item_name; 
    }

    return $item_name;
}
add_filter( 'woocommerce_order_item_name',2 );