
Nikolaus Koskowski
Wenn ich versuche, eine Bestellung während a WP_Ajax
Haken. 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');
Ich erhalte folgende Fehler:
Warnung: DOMXPath::query(): Ungültiger Ausdruck in /wp-content/plugins/woocommerce/includes/libraries/class-emogrifier.php in Zeile 299
Warnung: DOMXPath::query(): Ungültiger Ausdruck in /wp-content/plugins/woocommerce/includes/libraries/class-emogrifier.php in Zeile 299
Warnung: Ungültiges Argument für foreach() in /wp-content/plugins/woocommerce/includes/libraries/class-emogrifier.php in Zeile 302 angegeben
Warnung: DOMXPath::query(): Ungültiger Ausdruck in /wp-content/plugins/woocommerce/includes/libraries/class-emogrifier.php in Zeile 299
Warnung: DOMXPath::query(): Ungültiger Ausdruck in /wp-content/plugins/woocommerce/includes/libraries/class-emogrifier.php in Zeile 299
Warnung: Ungültiges Argument für foreach() in /wp-content/plugins/woocommerce/includes/libraries/class-emogrifier.php in Zeile 302 angegeben
Wenn ich das entferne update_status
Funktion es macht keine Fehler.
Die angezeigten Fehler stammen vom Benachrichtigungssystem. Ihr Code scheint den Status problemlos aktualisieren zu können. Die Emogrify-Klasse wird verwendet, um Inline-CSS in einer HTML-Vorlage zu generieren. Sie sehen diese Fehler wahrscheinlich, weil entweder A) Sie die E-Mail-Vorlage „Bestellung abgeschlossen“ überschrieben und einen Parsing-Fehler verursacht haben oder B) es ein WooCommerce-Add-on gibt, das in irgendeiner Weise mit dem, was Sie tun, in Konflikt steht.
Um das Problem zu beheben, besteht der erste Schritt darin, zu überprüfen, ob es sich um das Benachrichtigungssystem handelt, indem Sie in den Adminbereich unter WooCommerce->Einstellungen->E-Mail->Abgeschlossene Bestellung gehen und das Kontrollkästchen „Diese E-Mail-Benachrichtigung aktivieren“ deaktivieren. Dann speichern und erneut testen.
Wenn Ihr Fehler verschwindet, überprüfen Sie Ihr Themenverzeichnis auf eine Überschreibung dieser Vorlage. Es wäre drin <themename>/woocommerce/emails/customer-completed-order.php
. Wenn Sie eine haben, benennen Sie sie um, damit sie nicht mehr überschrieben wird, und aktivieren Sie die Benachrichtigung „Bestellung abgeschlossen“ erneut und prüfen Sie, ob die Verwendung der Standardvorlage das Problem behebt.
Wenn das Problem mit der Standardvorlage für E-Mail-Benachrichtigungen weiterhin besteht, deaktivieren Sie alle WooCommerce-Add-Ons, die Sie möglicherweise installiert haben, und testen Sie sie erneut. Wenn es funktioniert, können Sie sie zu diesem Zeitpunkt einzeln wieder aktivieren, bis das Problem wieder auftritt. Sobald Sie das problematische Add-On gefunden haben, müssen Sie entweder Ihren Code anpassen, damit das Add-On kein Problem verursacht, oder sich an den Add-On-Entwickler wenden, um Ihr Problem zu beheben.
Ich bin mir nicht sicher, aber Sie könnten diesen Trick ausprobieren new WC_Order( $order_id );
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 zu, dass dies ein seltsames Problem ist.
Da es sich um ein seltenes Problem handelt, sollten Sie Folgendes besser manuell öffnen:
/wp-content/plugins/woocommerce/includes/libraries/class-emogrifier.php
und fügen Sie vor Zeile 299 diese Zeilen ein und sehen Sie, was Sie erhalten:
var_dump($value);
var_dump($this->translateCssToXpath($value['selector']));
var_dump($xpath->query($this->translateCssToXpath($value['selector'])));
Ich habe das herausgefunden, indem ich eine Reihe verschiedener Hooks ausprobiert habe. Das Problem war, dass der Hook, den ich zum Erstellen der Bestellung verwendet habe, passiert ist, bevor Woocommerce das initialisiert hat, was dieses Problem verursacht hat.
10196200cookie-checkWoocommerce: Programmatisches Aktualisieren des Bestellstatusyes
Ich habe den obigen Code mit etwas zusätzlichem Code von mir ausprobiert, er funktioniert auf meinem Computer ohne Fehler. Können Sie Ihren vollständigen Code oben aktualisieren, damit ich ihn genau reproduzieren kann. Es ist hilfreich, wenn Sie Versionsdetails von WP, WC, Browser, Betriebssystem und wo Sie diese Fehler erhalten, oder einen Screenshot davon angeben können.
– Ratnakar – StoreApps
10. September 2016 um 15:30 Uhr
Wenn Sie eine E-Mail erhalten haben, wenn Sie eine Bestellung erstellen und den Status geändert haben, wird Ihre Bestellung erstellt, aber Sie erhalten keine E-Mail-Bestätigung über die Bestellung
– Benutzer5200704
10. September 2016 um 21:18 Uhr