添加我的自定义字段后,WooCommerce (HPOS) 未在结账时下新订单

问题描述 投票:0回答:1

在我的 WooCommerce 插件中,我使用

woocommerce_checkout_update_order_meta
钩子来处理我添加的自定义结帐字段。

首先我添加操作:

add_action('woocommerce_checkout_update_order_meta', __NAMESPACE__ . '\my_update_order_meta'); 

功能如下:

`function my_update_order_meta()
{
 $order = new \WC_Order();
 $billing_fields = ['billing_fiscalcode', 'billing_vatcode'];

 foreach ($billing_fields as $field) {
   if (!empty(sanitize_text_field($_POST[$field]))) {
      $order->update_meta_data($field, sanitize_text_field($_POST[$field]));
   }
 }
}`

当我尝试在我的商店下订单时,出现结账错误。深入研究一下代码,我发现我没有下订单,因为它的 id 是 0。有什么解决方案吗?

我尝试按照建议使用 wc_create_order() here,但仍然失败

php wordpress woocommerce metadata orders
1个回答
0
投票

主要错误是你忘记了函数中的钩子参数

$order_id
,然后你应该替换:

$order = new \WC_Order();

与:

$order = wc_get_order( $order_id );

使其发挥作用...

但是,从 WooCommerce 3 开始,请改用

woocommerce_checkout_create_order
挂钩,如下所示:

add_action('woocommerce_checkout_create_order', 'add_custom_order_metadata', 10, 2);
function add_custom_order_metadata( $order, $data ) {
    foreach (['billing_fiscalcode', 'billing_vatcode'] as $field) {
        if ( isset($_POST[$field]) && !empty($_POST[$field]) ) {
            $order->add_meta_data($field, sanitize_text_field($_POST[$field]), true);
        }
    }
}

代码位于子主题的functions.php 文件中(或插件中)。应该可以。

根据您的情况,您将替换:

add_action('woocommerce_checkout_create_order', 'add_custom_order_metadata', 10, 2);

与:

add_action('woocommerce_checkout_create_order', __NAMESPACE__ . '\add_custom_order_metadata', 10, 2);
© www.soinside.com 2019 - 2024. All rights reserved.