在我的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,我仍然失败
2条答案
按热度按时间z8dt9xmd1#
最后我找到了一个解决方案。我按照LoicTheAztec的建议使用
woocommerce_checkout_create_order
(感谢帮助!),然后我像这样编辑函数:字符串
kninwzqo2#
主要的错误是你忘记了函数中的钩子参数
$order_id
,然后你应该替换:字符串
使用:
型
为了使它工作,在最后,在最后一个结束括号之前,你需要添加:
型
但是,从WooCommerce 3开始,使用
woocommerce_checkout_create_order
钩子,如下所示:型
代码放在你的子主题的functions.php文件中(或者插件中)。它应该可以工作。
对于一个插件,你应该需要替换:
型
使用:
型
备注:
woocommerce_checkout_create_order
钩子时,函数不需要$order->save();
,因为它包含在钩子之后。add_meta_data()
方法而不是update_meta_data()
,因为您正在添加元数据 (而不是更新它)。