我正在尝试向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']));
}
答案 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 ));
}