当前位置: 首页 > 知识库问答 >
问题:

将订单项目自定义字段总和另存为新元数据

巫马盛
2023-03-14

在该商业商店订购特定产品时,将向订单添加两个元值。

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

元键是:

quantity
assemblycost

我希望在下新订单时以编程方式创建一个新的自定义字段,并将此新字段的值设置为quantity*assemblycost,前提是已订购的产品存在元键assemblycost。

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

参考:为Woocommerce中的订单添加额外的元数据:

 function add_item_meta( $order_id ) {
            //global $woocommerce;
            update_post_meta( $order_id, '_has_event', 'yes' );
        } 

我尝试在函数中添加以下代码。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。

我如何改变上面的代码,使calculated_field的值是数量*汇编成本的乘法?

共有1个答案

高迪
2023-03-14

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

现在,这应该与您的两个自定义字段数量组装成本同时保存。因此,您应该在问题中提供将数量组装成本保存为订单项元数据的相关代码。

您可以尝试以下方法(但我不确定我是否会工作):

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活动子主题(或活动主题)的文件中。

 类似资料: