在我的 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,但仍然失败
主要错误是你忘记了函数中的钩子参数
$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);