php - 将 WooCommerce 订单项自定义字段总和保存为新的元数据
问题描述
在此 WooCommerce 商店中订购特定产品时,会将两个元值添加到订单中。
存储元值的两个字段位于wp_woocommerce_order_itemmeta
元键是:
quantity
assemblycost
我想在下新订单时以编程方式创建一个新的自定义字段,并将这个新字段的值设置为等于quanity * assemblycost
已订购产品的元键组装成本是否存在。
经过一番研究,我发现这woocommerce_checkout_update_order_meta
是一个在订单保存到数据库并且元数据已更新后执行的钩子。所以这似乎是我应该使用的钩子。
参考: 在 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。
如何更改上面的代码,以便计算字段的值是 的乘积quantity * assemblycost
?
解决方案
这与订单项目有关,应保存为订单项目元数据,而不是订单元数据。
现在这应该与您的 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 文件中。
推荐阅读
- php - 返回 WordPress 中的当前 URL
- .net - 从 DTSX 包中使用 REST API 的最佳方式是什么?
- serverless-framework - 无服务器 yml 上的 CORS
- javascript - 填充div隐藏/显示的空白
- php - 如何使用 .htaccess 重写规则?
- web3swift - 如何在 web3swift 中使用自定义 json 合约
- excel - 使用 VBA 仅复制和粘贴具有值的单元格
- html - 旋转的 div 不粘在视口的右边界(向左平坦)
- react-native - Redux 和 React Native - 如何将回调连接到调度
- docker - docker-compose 与 vue-cli 不工作