在此WooCommerce商店中订购特定产品时,两个元值将添加到该订单中。
存储元值的两个字段位于wp_woocommerce_order_itemmeta
元键是:
quantity
assemblycost
我想在下达新订单时以编程方式创建一个新的自定义字段,如果已订购产品的元密钥组装成本存在,则将该新字段的值设置为quanity * assemblycost
。
经过一番研究,我发现woocommerce_checkout_update_order_meta
是一个挂钩,在将订单保存到数据库且元数据已更新后将执行该挂钩。因此,这似乎是我应该使用的钩子。
参考: Add extra meta for orders in Woocommerce:
function add_item_meta( $order_id ) {
//global $woocommerce;
update_post_meta( $order_id, '_has_event', 'yes' );
}
我尝试在functions.php中添加以下代码:
add_action('woocommerce_checkout_update_order_meta',function( $order_id, $posted ) {
$assemblycost = wc_get_order_item_meta($order_id, 'assemblycost');
$quantity = wc_get_order_item_meta($order_id, 'quantity');
$calculatedValue = $quantity * $assemblycost;
wc_update_order_item_meta( $order_id, 'calculated_field', $calculatedValue );
} , 10, 2);
这确实创建了新的meta字段,但是将其值设置为0。
如何更改上面的代码,以使calculated_field的值等于quantity * assemblycost
的乘积?
答案 0 :(得分:1)
这与订单商品有关,应保存为订单商品元数据,而不是订单元数据。
现在应与您的2个自定义字段assemblycost
和quantity
一起保存。因此,您应该在问题中提供将assemblycost
和add_action( 'woocommerce_checkout_create_order_line_item', 'action_checkout_create_order_line_item_callback', 1000, 4 );
function action_checkout_create_order_line_item_callback( $item, $cart_item_key, $cart_item, $order ) {
$quantity = $item->get_meta('quantity');
$assemblycost = $item->get_meta('assemblycost');
if( isset($quantity) && isset($assemblycost) ) {
$item->update_meta_data( 'calculated_field', $quantity * $assemblycost );
}
}
保存为订单项元数据的相关代码。
您可以尝试以下操作(但我不确定我会工作):
Student
代码进入您的活动子主题(或活动主题)的function.php文件中。