Woocommerce:以编程方式更新订单状态

Nic*_*ski 14 php wordpress plugins orders woocommerce

当我尝试以编程方式更新WP_Ajax挂钩期间的订单时.IE浏览器.

$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');
Run Code Online (Sandbox Code Playgroud)

我收到以下错误:

警告:DOMXPath :: query():第299行/wp-content/plugins/woocommerce/includes/libraries/class-emogrifier.php中的表达式无效

警告:DOMXPath :: query():第299行/wp-content/plugins/woocommerce/includes/libraries/class-emogrifier.php中的表达式无效

警告:在第302行的/wp-content/plugins/woocommerce/includes/libraries/class-emogrifier.php中为foreach()提供的参数无效

警告:DOMXPath :: query():第299行/wp-content/plugins/woocommerce/includes/libraries/class-emogrifier.php中的表达式无效

警告:DOMXPath :: query():第299行/wp-content/plugins/woocommerce/includes/libraries/class-emogrifier.php中的表达式无效

警告:在第302行的/wp-content/plugins/woocommerce/includes/libraries/class-emogrifier.php中为foreach()提供的参数无效

如果我删除该update_status功能,它不会出错.

BA_*_*max 5

您看到的错误来自通知系统.您的代码似乎能够更新状态.Emogrify类用于在HTML模板中生成内联CSS.您可能会看到这些错误,因为A)您已覆盖"已完成订单"电子邮件模板并创建了解析错误或B)有一个WooCommerce附加组件与您正在进行的操作有某种冲突.

要解决此问题,第一步是通过在WooCommerce-> Settings-> Email-> Completed order下进入管理员并取消选中"启用此电子邮件通知"框来验证它是否是通知系统.然后保存并重新测试.

如果您的错误消失了,请检查您的主题目录是否覆盖该模板.它会在<themename>/woocommerce/emails/customer-completed-order.php.如果您有一个,则重命名它以使其不再覆盖并重新激活"已完成订单"通知,并查看是否使用默认模板更正了问题.

如果问题仍然存在于默认电子邮件通知模板中,则禁用您可能已安装并重新测试的所有WooCommerce附加组件.此时,如果它正常工作,您可以逐个重新启用它们,直到问题返回.找到有问题的插件后,您需要调整代码以允许插件不会导致问题,或者联系附加开发人员以解决您的问题.


Loi*_*tec 4

我不确定,但你可以尝试使用这个技巧new WC_Order( $order_id );,以避免错误:

\n\n
// global $woocommerce; // in case of need\xe2\x80\xa6\n$order = wc_create_order($order_data);\n$order_id = $order->id; // moving this here\n$_order = new WC_Order( $order_id ); // here\n$_order->add_product( get_product( $membership_product_ids[0] ), 1 );\n$_order->set_address( $address, 'billing' );\n$_order->set_address( $address, 'shipping' );\n$_order->update_status('completed');\n
Run Code Online (Sandbox Code Playgroud)\n\n

我同意这是一个奇怪的问题。

\n

  • @NicholasKoskowski 我在测试你的代码时也没有任何错误......请,要真正获得帮助,请使用完整的代码和更多详细信息更新你的问题。谢谢 (2认同)