当我尝试在 WP_Ajax
Hook 期间以编程方式更新订单时。浏览器。
$order = wc_create_order($order_data);
$order->add_product( get_product( $membership_product_ids[0] ), 1 );
$order->set_address( $address, 'billing' );
$order->set_address( $address, 'shipping' );
$order_id = $order->id;
$order->update_status('completed');
我收到以下错误:
Warning: DOMXPath::query(): Invalid expression in /wp-content/plugins/woocommerce/includes/libraries/class-emogrifier.php on line 299
Warning: DOMXPath::query(): Invalid expression in /wp-content/plugins/woocommerce/includes/libraries/class-emogrifier.php on line 299
Warning: Invalid argument supplied for foreach() in /wp-content/plugins/woocommerce/includes/libraries/class-emogrifier.php on line 302
Warning: DOMXPath::query(): Invalid expression in /wp-content/plugins/woocommerce/includes/libraries/class-emogrifier.php on line 299
Warning: DOMXPath::query(): Invalid expression in /wp-content/plugins/woocommerce/includes/libraries/class-emogrifier.php on line 299
Warning: Invalid argument supplied for foreach() in /wp-content/plugins/woocommerce/includes/libraries/class-emogrifier.php on line 302
如果我删除 update_status
函数,它不会出错。
最佳答案
您看到的错误来自通知系统。您的代码似乎能够很好地更新状态。 Emogrify 类用于在 HTML 模板中生成内联 CSS。您可能会看到这些错误,因为 A) 您覆盖了“已完成订单”电子邮件模板并产生了解析错误,或者 B) 有一个 WooCommerce 插件在某种程度上与您正在做的事情有冲突。
要纠正此问题,第一步是通过进入 WooCommerce->设置->电子邮件-> 已完成订单下的管理员并取消选中“启用此电子邮件通知”框来验证它是通知系统.然后保存并重新测试。
如果您的错误消失了,请检查您的主题目录以查找该模板的覆盖。它将在 <themename>/woocommerce/emails/customer-completed-order.php
中.如果您有,他们会重命名它,使其不再覆盖并重新激活“已完成订单”通知,并查看使用默认模板是否可以解决问题。
如果默认电子邮件通知模板的问题仍然存在,请禁用您可能已安装的所有 WooCommerce 附加组件并重新测试。此时,如果它正常工作,您可以一个接一个地重新启用它们,直到问题再次出现。找到有问题的加载项后,您需要调整代码以使加载项不会引起问题,或者联系加载项开发人员解决您的问题。
关于php - Woocommerce:以编程方式更新订单状态,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37847681/