2016-06-15 16 views
14

Wenn ich versuche, eine Bestellung während eines WP_Ajax Hooks programmatisch zu aktualisieren. IE.Woocommerce: Programmgesteuertes Aktualisieren des Bestellstatus

$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'); 

ich folgende Fehler:

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

Wenn ich entfernen, dass update_status Funktion es keine Fehler macht.

+1

Ich versuchte oben Code mit einigen zusätzlichen Code von mir, es funktioniert gut auf meiner Maschine ohne Fehler. Können Sie Ihren vollständigen Code oben aktualisieren, damit ich ihn genau reproduzieren kann? Es wird hilfreich sein, wenn Sie Versionsdetails von WP, WC, Browser, OS und wo Sie diese Fehler bekommen oder Screenshot davon geben können. –

+0

Was Sie haben eine E-Mail, wenn Sie eine Bestellung erstellen und Status geändert, ist Ihre Bestellung erstellt, aber keine E-Mail-Bestätigung über die Bestellung abgeschlossen ist – user5200704

Antwort

3

Ich bin nicht sicher, aber man könnte diesen Trick versucht new WC_Order($order_id); verwenden, um den Fehler zu vermeiden:

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

Ich stimme dies ein seltsames Problem.

+0

Dies hat den Fehler für mich leider nicht behoben, aber ich danke Ihnen für den Versuch, es ist so seltsam Problem! Upvote! –

+2

@NicholasKoskowski Ich habe keine Fehler zu testen Sie Ihren Code ... Bitte, um wirklich geholfen zu bekommen, aktualisieren Sie Ihre Frage mit vollem Code und viel mehr Details. Vielen Dank – LoicTheAztec

5

Die Fehler, die Sie sehen, stammen aus dem Benachrichtigungssystem. Ihr Code scheint in der Lage zu sein, den Status zu aktualisieren. Die Emogrify-Klasse wird zum Generieren von Inline-CSS in einer HTML-Vorlage verwendet. Sie sehen wahrscheinlich diese Fehler, weil entweder A) Sie die E-Mail-Vorlage "Abgeschlossene Bestellung" überschrieben und einen Parsing-Fehler erstellt haben oder B) ein WooCommerce-Add-On vorhanden ist, das in gewisser Weise mit dem, was Sie tun, in Konflikt steht.

Um das Problem zu beheben, wird der erste Schritt sein, zu überprüfen, dass es das Benachrichtigungssystem ist, indem Sie in den Admin unter WooCommerce-> Einstellungen-> E-Mail-> Abgeschlossene Bestellung und deaktivieren Sie die "Aktivieren Sie diese E-Mail-Benachrichtigung" Box. Dann speichern Sie das und wiederholen Sie den Test.

Wenn der Fehler nicht mehr angezeigt wird, überprüfen Sie Ihr Designverzeichnis auf eine Überschreibung dieser Vorlage. Es wäre in <themename>/woocommerce/emails/customer-completed-order.php. Wenn Sie einen haben, benennen Sie ihn um, so dass er nicht mehr überschrieben wird. Aktivieren Sie die Benachrichtigung "Abgeschlossene Bestellung" erneut und prüfen Sie, ob die Verwendung der Standardvorlage das Problem behebt.

Wenn das Problem weiterhin bei der Standard-E-Mail-Benachrichtigungsvorlage auftritt, deaktivieren Sie alle WooCommerce-Add-Ons, die Sie möglicherweise installiert und erneut getestet haben. Wenn es funktioniert, können Sie sie zu diesem Zeitpunkt wieder aktivieren, bis das Problem zurückkehrt. Sobald Sie das problematische Add-on gefunden haben, müssen Sie entweder Ihren Code anpassen, damit das Add-on kein Problem verursacht, oder den Add-on-Entwickler kontaktieren, um das Problem zu beheben.

1

zu fragen, wie es selten Problem ist, ist besser, manuell zu öffnen:

/wp-content/plugins/woocommerce/includes/libraries/class-emogrifier.php

und vor Zeile 299, diese Zeilen einfügen, und sehen, was Sie werden erhalten:

0

Ich fand dies heraus, indem ich eine Reihe von verschiedenen Haken ausprobierte, das Problem war, dass der Haken, den ich benutzte, c war Reate die Reihenfolge passiert ist, bevor woocommerce initialisiert, was dieses Problem verursacht.

Verwandte Themen