2016-06-15 6 views
14

Когда я пытаюсь программно обновлять заказ во время крючка WP_Ajax. IE.Woocommerce: программно обновлять статус заказа

$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 функции это не ошибки.

+1

Я пробовал код с некоторым дополнительным кодом, он отлично работает на моей машине без каких-либо ошибок. Можете ли вы обновить свой полный код выше, чтобы я мог точно воспроизвести его. Это будет полезно, если вы можете предоставить информацию о версии WP, WC, браузера, ОС и где вы получаете эти ошибки или снимок экрана. –

+0

Что вы получили по электронной почте при создании заказа и изменен статус выполнен, ваш заказ создан, но не получен, подтверждение по электронной почте о заказе завершено. – user5200704

ответ

3

Я не уверен, но вы можете попробовать этот трюк с помощью 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'); 

Я согласен, что это странный вопрос.

+0

Это не исправляло ошибку для меня, к сожалению, но спасибо за то, что попробовал ее такую ​​странную вопрос! Upvote! –

+2

@NicholasKoskowski У меня нет ошибок, слишком проверяющих ваш код ... Пожалуйста, Чтобы получить помощь, обновите свой вопрос с полным кодом и более подробной информацией. благодаря – LoicTheAztec

5

Ошибки, которые вы видите, исходят от системы уведомлений. Ваш код может обновить статус просто отлично. Класс Emogrify используется для создания встроенного CSS в HTML-шаблоне. Вероятно, вы видите эти ошибки, потому что либо A) вы переопределили шаблон электронной почты «Завершенный заказ» и создали ошибку синтаксического анализа, либо B) есть надстройка WooCommerce, которая каким-то образом противоречит тому, что вы делаете.

Для исправления этой проблемы первым шагом будет проверка того, что это система уведомлений, перейдя в администратор в разделе WooCommerce-> Settings-> Email-> Completed order и отменив отметку «Включить это уведомление по электронной почте», коробка. Затем сохраните это и повторите проверку.

Если ваша ошибка исчезнет, ​​проверьте в своем каталоге тему переопределение этого шаблона. Это было бы в <themename>/woocommerce/emails/customer-completed-order.php. Если он у вас есть, они переименовывают его, поэтому он больше не будет переопределять и повторно активировать уведомление «Завершенный заказ» и посмотреть, исправляет ли этот шаблон по умолчанию шаблон.

Если проблема не устранена с помощью шаблона уведомления по умолчанию по умолчанию, отключите все дополнения WooCommerce, которые вы, возможно, установили и протестировали. На этом этапе, если он работает, вы можете повторно включить их один за другим, пока проблема не вернется. После того, как вы обнаружите оскорбительное дополнение, вам необходимо либо настроить свой код, чтобы позволить надстройку не вызывать проблемы, либо связаться с разработчиком надстройки, чтобы решить проблему.

1

Как это редкая проблема, вы бы лучше вручную открыть:

/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']))); 
0

Я понял это, пробуя ряд различных крючков, проблема в том, что крючок я использую -с повторить заказ, произошедший до того, как woocommerce инициализировала, что вызвало эту проблему.

Смежные вопросы