为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

PHP
侃侃尔雅 2021-05-06 14:38:04
当在此WooCommerce商店中订购特定产品时,两个元值将添加到该订单中。存储元值的两个字段位于 wp_woocommerce_order_itemmeta中继键为:quantityassemblycost我想在下新订单时以编程方式创建一个新的自定义字段,并将此新字段的值设置为等于quanity * assemblycost是否已订购的产品存在元密钥assemblycost。经过一番研究,我发现这woocommerce_checkout_update_order_meta是一个将订单保存到数据库并且元数据已更新后执行的挂钩。因此,这似乎是我应该使用的钩子。参考: 在Woocommerce中为订单添加额外的meta: 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?
查看完整描述

1 回答

?
海绵宝宝撒

TA贡献1809条经验 获得超8个赞

这与订单商品有关,应另存为订单商品元数据,而不能另存为订单元数据。


现在,这应该与您的2个自定义字段quantity和同时保存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 );

    }

}

代码进入您的活动子主题(或活动主题)的function.php文件中。


查看完整回答
反对 回复 2021-05-21
  • 1 回答
  • 0 关注
  • 148 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信