Das Verhalten, das Sie beschreiben, ist möglich, wenn Sie auf "woocommerce_loaded" haken, aber es ist nicht möglich, wenn Sie auf "woocommerce_init" haken.
Die letzte Zeile von wp-content/Plugins/WooCommerce/woocommerce.php ist
// Global for backwards compatibility.
$GLOBALS['woocommerce'] = WC();
Dies deutet darauf hin, dass unter Verwendung von global $woocommerce
veraltet.
Die letzte Zeile ist globaler Code, der ausgeführt wird, nachdem die Datei enthalten ist. Während der Erstellung der Klasse WC wird der Konstruktor ausgeführt.
/**
* WooCommerce Constructor.
*/
public function __construct() {
$this->define_constants();
$this->includes();
$this->init_hooks();
do_action('woocommerce_loaded');
}
init_hooks() fügt die Init-Funktion von WC zur höheren WP-Init-Aktion hinzu. Dann wird die woocommerce_loaded Aktion ausgelöst. Dies wird ausgelöst vor der Konstruktor abgeschlossen ist, und vor das Objekt wird dem globalen Array hinzugefügt.
Nachdem die Aktion 'woocommerce_loaded' ausgeführt wurde, wird der Konstruktor zurückgegeben und das WC-Objekt wird den Globals hinzugefügt. Es gibt keine Möglichkeit, die Init-Aktion von WP auszulösen, und woocommerce ist darin eingebunden, ohne dass das Globale verfügbar ist.
Dies ist für WC 2.5.5, ich habe den Quellcode zurück auf 2.3.0 überprüft, andere Versionen können anders sein.
Möglicherweise haben Sie ein Rouge-Plugin oder -Thema, das "woocomerce_init" aufruft, bevor das WC() -Objekt erstellt wird oder bevor es zurückkehrt (d. H. In der woocommerce_loaded-Aktion).
Die einzige wirkliche Erklärung ist, dass Ihre Funktion on_woocommerce() von einem anderen Hook oder auf andere Weise versehentlich aufgerufen wird. Es gibt keine Möglichkeit, dass die globale Funktion WC() definiert werden könnte, aber die nächste Zeile des Quellcodes wurde nicht ausgeführt (was das Ergebnis von WC() in einer globalen Variablen speichert).
log_cart ist mit welchem Hook im ersten Beispiel verbunden? Kannst du klarer sein? – chugadie
Aktualisiert, um die Struktur meines Codes verständlicher zu machen – Ferex
@LoicTheAztec '$ woocommerce-> cart = new WC_Cart();' tut nichts mehr – Ferex