如何在WooCommerce中为每个订单项目添加新的元项目?

时间:2019-05-09 11:47:55

标签: wordpress woocommerce

我正在尝试向wp_woocommerce_order_itemmeta表中的每个订单项添加元数据。例如,在一个订单中,有两件T恤,每件T恤都可以印有唯一的自定义名称,或者在一个订单中的所有衬衫都可以具有相同的自定义名称。我已经看到了使用update_post_meta的示例,但这会将元数据添加到整个订单中(添加到wp_postmeta表中)。

然后,我看到了Woocommerce: Which hook to replace deprecated "woocommerce_add_order_item_meta",并按照以下示例进行操作。

    // Save custom data to order item meta data
add_action( 'woocommerce_checkout_create_order_line_item', 'custom_checkout_create_order_line_item', 20, 4 );

function custom_checkout_create_order_line_item( $item, $cart_item_key, $values, $order ) {
    // Get a product custom field value
    $custom_field_value = get_post_meta( $item->get_product_id(), 'design', true );


    // Update order item meta
    if ( ! empty( $custom_field_value ) ){
        $item->update_meta_data( 'design', $custom_field_value );
    }
}

但是它不起作用。我有一个名为“ design”的自定义字段,但是我的wp_woocommerce_order_itemmeta表不包含“ design”元数据。

我做错了吗?

这是我创建自定义字段以及保存其数据的方式。我设法只将元数据保存在wp_postmeta表中。

add_action('woocommerce_after_order_notes', 'cw_custom_checkbox_fields');

add_action('woocommerce_checkout_update_order_meta', 'cw_checkout_order_meta');

function cw_custom_checkbox_fields( $checkout ) {

     woocommerce_form_field( 'design', array(
      'type'          => 'text',
    ), $checkout->get_value( 'design' ) );
}

function cw_checkout_order_meta( $order_id ) {
    if ($_POST['design']) update_post_meta( $order_id, 'design', esc_attr($_POST['design']));
}

1 个答案:

答案 0 :(得分:0)

试试看,

add_action( 'woocommerce_checkout_create_order_line_item', 'add_my_meta_to_line_item', 10, 4 );

function add_my_meta_to_line_item( $item, $cart_item_key, $values, $order) {
  if ($_POST['design']) $item->add_meta_data( 'design', esc_attr($_POST['design'], true ));
}