gpt4 book ai didi

php - 将 WooCommerce 订单项自定义字段总和保存为新元数据

转载 作者:行者123 更新时间:2023-12-02 20:00:55 27 4
gpt4 key购买 nike

当在此 WooCommerce 商店中订购特定产品时,两个元值将添加到订单中。

存储元值的两个字段位于 wp_woocommerce_order_itemmeta

元键是:

quantity
assemblycost

我想在下新订单时以编程方式创建一个新的自定义字段,如果已订购的产品存在元键 assemblycost,则将此新字段的值设置为等于 quantity * assemblycost订购了。

经过一些研究,我发现 woocommerce_checkout_update_order_meta 是一个钩子(Hook),在订单保存到数据库并且元数据已更新后执行。所以这似乎是我应该使用的钩子(Hook)。

引用: 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);

这确实创建了新的元字段,但它将值设置为 0。

enter image description here

如何更改上面的代码,以便计算字段的值是 quantity * assemblycost 的乘积?

最佳答案

这与订单商品相关,应保存为订单商品元数据,而不是订单元数据。

现在,这应该与您的 2 个自定义字段quantity assemblycost同时保存。因此,您应该在问题中提供将 quantityassemblecost 保存为订单项元数据的相关代码。

您可以尝试以下方法(但我不确定是否有效):

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 );
}
}

代码位于事件子主题(或事件主题)的 function.php 文件中。

关于php - 将 WooCommerce 订单项自定义字段总和保存为新元数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55878479/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com