当我试图在WP_Ajax
挂钩期间以编程方式更新订单时。即。
$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');
我得到以下错误:
警告: 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
函数,它不会出错。
发布于 2016-06-15 16:56:15
我不确定,但是您可以使用new WC_Order( $order_id );
来尝试这个技巧,以避免错误:
// global $woocommerce; // in case of need…
$order = wc_create_order($order_data);
$order_id = $order->id; // moving this here
$_order = new WC_Order( $order_id ); // here
$_order->add_product( get_product( $membership_product_ids[0] ), 1 );
$_order->set_address( $address, 'billing' );
$_order->set_address( $address, 'shipping' );
$_order->update_status('completed');
我同意这是一个奇怪的问题。
发布于 2016-09-16 04:58:15
由于这是一个罕见的问题,您最好手动打开:
/wp-content/plugins/woocommerce/includes/libraries/class-emogrifier.php
在第299行之前,插入这些行,并查看您将得到什么:
var_dump($value);
var_dump($this->translateCssToXpath($value['selector']));
var_dump($xpath->query($this->translateCssToXpath($value['selector'])));
发布于 2017-01-23 13:25:20
我通过尝试一系列不同的钩子解决了这个问题,问题是我用来创建订单的钩子发生在woocommerce初始化导致这个问题的原因之前。
https://stackoverflow.com/questions/37847681
复制相似问题