【问题标题】:Save WooCommerce order item custom fields sum as a new meta data将 WooCommerce 订单项目自定义字段总和保存为新的元数据
【发布时间】:2019-09-16 14:37:31
【问题描述】:

在此 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);

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

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

【问题讨论】:

    标签: php wordpress woocommerce hook-woocommerce orders


    【解决方案1】:

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

    现在这应该同时保存而不是您的 2 个自定义字段 quantityassemblycost。所以你应该在你的问题中提供将quantityassemblycost保存为订单项元数据的相关代码。

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

    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 文件中。

    【讨论】:

    • 效果很好。我有一个后续问题。这会在订单中为每个订购的产品添加一个自定义字段“calculated_field”。您是否知道我如何在整个订单中再添加一个自定义字段,即订单中所有“calculated_field”的总和?例如订单中的产品A,计算字段值为25,订单中的产品B,计算字段值为50。那么整个订单的这个额外的自定义字段应该是50+25 = 75。谢谢。
    • @Gary 请用它提出一个新问题……完成后通知我,我会回答。
    • @LociTheAztec 非常感谢 - 这是后续问题:stackoverflow.com/questions/55879116/…
    猜你喜欢
    • 2023-03-15
    • 2019-09-16
    • 2021-05-17
    • 1970-01-01
    • 2018-07-04
    • 1970-01-01
    • 2021-05-12
    • 1970-01-01
    • 2019-06-21
    相关资源
    最近更新 更多