作为订单上的项目元数据动态添加自定义产品数据

jap*_*tin 2 wordpress product orders woocommerce hook-woocommerce

是否可以在订单内的产品上添加元数据?

在这种情况下,将有一个元数据,但每个产品(按顺序)将具有不同的值.例:

Order 1:
     * Product 1 
     Sample Meta: Meta1

     * Product 2
     Sample Meta: Meta2
Run Code Online (Sandbox Code Playgroud)

谢谢.


Update1:

我现在停留在如何从woocommerce_add_cart_item_data过滤器中获取值.我能够从那里成功添加元数据.

我需要抓住这些值才能在此woocommerce_add_order_item_meta动作钩子中使用.

这是我成功将元数据添加到过滤器的方式:

function add_cart_item_data( $cart_item_data, $product_id ) {
    $cart_item_data[ "meta1" ] = $_POST["meta1"];  
    $cart_item_data[ "meta2" ] = $_POST["meta2"]; 
    return $cart_item_data;
}
add_filter( 'woocommerce_add_cart_item_data', 'add_cart_item_data', 99, 2 );
Run Code Online (Sandbox Code Playgroud)

Loi*_*tec 6

是的,这可以使用钩在woocommerce_add_order_item_meta动作钩子中的自定义函数.

add_action('woocommerce_add_order_item_meta','adding_custom_data_in_order_items_meta', 1, 1 );
function adding_custom_data_in_order_items_meta( $item_id, $values, $cart_item_key ) {

    // The corresponding Product Id for the item:
    $product_id = $values[ 'product_id' ];

    $custom_meta_value = $values['my_custom_field1_key'];
    // or $custom_meta_value = $_POST['my_custom_field_key'];
    // or $custom_meta_value = get_post_meta( $values[ 'product_id' ], '_some_meta_key', true );

    if ( !empty($custom_meta_value) ) 
        wc_add_order_item_meta($item_id, 'custom_meta_key', $custom_meta_value, true);

    // And so on …
}
Run Code Online (Sandbox Code Playgroud)

但由于您的问题并不详细,并且您没有显示任何与您的产品中如何设置此自定义数据或传递给购物车对象相关的代码,因此无法提供更多帮助.


与您的答案相关的更新:( 在链接的答案中查看一个有效的实例):

将用户自定义字段值添加到订单项详细信息

因此,在这个链接的答案中,您将需要首先创建一个产品属性,因为在您的代码中,wc_add_order_item_meta($item_id, 'The Meta', $the_meta );由于第二个参数必须是没有大写空格字符的meta_keyslug,因此不正确,所以不方便,不推荐...'The Meta'

此产品属性创建名称将(关于您的答案代码):'The Meta'和slug 'the_meta'.

然后,您必须在每个相关产品中设置一个强制值(只有任何值,因为此值将被下面的自定义值替换).

一旦完成,您的代码将是:

add_action('woocommerce_add_order_item_meta','adding_custom_data_in_order_items_meta', 10, 3 );
function adding_custom_data_in_order_items_meta( $item_id, $values, $cart_item_key ) {
    if ( isset($values['meta1']) && isset($values['meta2']) ) {
        $custom_value = $values['meta1'] . '.' .  $values['meta2'];
        wc_add_order_item_meta($item_id, 'pa_the-meta', $custom_value );
    }
}
Run Code Online (Sandbox Code Playgroud)

然后,您将在订单项目中显示此类显示(此处"XXXX"是您的自定义值):

The Meta: XXXX
Run Code Online (Sandbox Code Playgroud)