保存自定义WooCommerce购物车数据以订购产品项元数据



我试图将购物车元数据添加到订单中的产品中。到目前为止,我已经成功地在购物车级别向产品添加了自定义值(通过在购物车表中内联输出值来证明),但是一旦完成了最后的结帐,它就不会保存在任何地方。

加入购物车(确认有效):

function se_wc_add_product_order_type_cart( $cart_item, $product_id ) {
$product_order_type = $_POST['product_order_type'] ?? '';
if ( $product_order_type ) {
$cart_item['product_order_type'] = sanitize_text_field( $product_order_type );
}
return $cart_item;
}
add_filter( 'woocommerce_add_cart_item_data', 'se_wc_add_product_order_type_cart', 10, 2 );

从购物车添加订单(不工作):

function se_wc_product_add_on_order_item_meta( $item, $cart_item_key, $values, $order ) {
$product_order_type = $values['product_order_type'] ?? '';
if ( ! empty( $product_order_type ) ) {
$item->add_meta_data( 'product_order_type', $product_order_type );
}
}
add_action( 'woocommerce_checkout_create_order_line_item', ' se_wc_product_add_on_order_item_meta', 10, 4 );

没有任何东西被保存到数据库(假设它应该在wp_woocommerce_order_itemmeta表中),并且从woocommerce_order_item_get_formatted_meta_data钩子在meta_data字段上做var_dump是空的-可能再次出现在那里。

如果重要,产品是可变产品,网站是多站点。

您可以使用下面的代码添加item meta到order meta:

function se_wc_product_add_on_order_item_meta( $item_id, $values ) {
$product_order_type = $values['product_order_type'];
if ( ! empty( $product_order_type ) ) {
wc_add_order_item_meta($item_id,'product_order_type',$product_order_type);
}
}
add_action( 'woocommerce_new_order_item', ' se_wc_product_add_on_order_item_meta', 1, 2 );

谢谢。

最新更新