在订单

时间:2017-02-01 03:23:25

标签: wordpress woocommerce product hook-woocommerce orders

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

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

Order 1:
     * Product 1 
     Sample Meta: Meta1

     * Product 2
     Sample Meta: Meta2

感谢。

更新1:

我现在停留在如何从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 );

2 个答案:

答案 0 :(得分: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_field = $values['my_custom_field1_key'];
    // or $custom field = $_POST['my_custom_field_key'];
    // or $custom field = get_post_meta( $values[ 'product_id' ], '_some_meta_key', true );

    if ( !empty($custom field1) ) 
        wc_add_order_item_meta($item_id, 'custom_meta_key', $custom_field, true);

    // And so on …
}
  

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

与您的回答相关的更新: (请参阅链接的答案,并附上一个有效的实例)

Adding user custom field value to order items details

  

因此,在此链接答案中,您需要先创建一个产品属性,因为在您的代码中,wc_add_order_item_meta($item_id, 'The Meta', $the_meta );不正确,因为第二个参数必须是 meta_key slug 没有大写空格字符,所以'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 );
    }
}

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

The Meta: XXXX

答案 1 :(得分:0)

创建属性“Meta”并将其添加到产品后。

我用以下方法回答了我的问题:

首先:通过woocommerce_add_cart_item_data过滤器钩子添加元数据。这将首先将元添加到购物车内的商品。

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', 10, 2 );

第二:将添加到购物车的元数量保存到订单中购买的实际商品

function adding_custom_data_in_order_items_meta( $item_id, $values, $cart_item_key ) {
    if ( isset($values['meta1']) && isset($values['meta2']) ) {
        $the_meta = $values['meta1'] . '.' .  $values['meta2'];
        wc_add_order_item_meta($item_id, 'pa-the-meta', $the_meta );
    }
}
add_action('woocommerce_add_order_item_meta','adding_custom_data_in_order_items_meta', 10, 3 );