Ich entwickle ein Wordpress Woocommerce Plugin. In meiner lokalen Umgebung funktioniert es einwandfrei, aber ich habe Probleme beim Hinzufügen des Plugins zu einer Replik der Produktumgebung. Ich bin neu in WordPress und nicht sehr vertraut mit Webentwicklern (ich bin ein Java-Programmierer).
In der Plugin-Datei instanziiere ich eine Klasse aus dem Woocommerce-Plugin-Paket wie folgt:
$coupon = new WC_Coupon($some_code);
In der lokalen Umgebung (PHP 5.4.10, Woocommerce 2.0.13, Wordpress 3.6) ist es in Ordnung. In der Produktionsumgebung (PHP 5.4.10, Woocommerce 1.6.5.2, Wordpress 3.4.2) habe ich den folgenden Fehler:
Fatal error: Class 'WC_Coupon' not found
Ich habe versucht, die Datei einzuschließen, in der die WC_Coupon-Klasse definiert ist, aber dann wird der Fehler
Fatal error: Cannot redeclare class WC_Coupon
Was ist also der richtige Weg, um Klassen zu verwenden, die in einem anderen Plugin deklariert sind?
Hinweis: Ein Upgrade ist derzeit nicht möglich.
plugins_loaded
der richtige Haken ist. Man wird suchen müssen , wenn genau diese Klasse in verfügbar und Haken nach , dass. Wie auch immer +1register_deactivation_hook( __FILE__, 'deactivate');
. Also kann ich nicht warten. Kann ich WordPress bitten, die Klasse zu laden, wenn sie noch nicht geladen ist?WC_Coupon
wird von__construct
der Hauptklasse geladenWooCommerce
(wirklich von derincludes()
Methode, die direkt von aufgerufen wird__construct
) und dieWooCommerce
Klasse ist instanziiert (als Singleton), sobald das Plugin geladen wird. Soplugins_loaded
ist der richtige Haken in diesem Fall;)class_exists( 'WC_Coupon' )
. Bitte geben Sie auch an, dass Sie dies während der Deaktivierung verwenden ... es hätte viel Zeit sparen können, der Menge zu antworten ...Dies ist zu spät, aber ich möchte mitteilen, wie Woocommerce und seine Klassen verwendet werden, ohne dass eine Fehlerklasse nicht gefunden wird.
Überprüfen Sie zunächst, ob Woocommerce installiert ist, und verwenden Sie den Aktionshaken
woocommerce_loaded
.Ich hoffe das hilft jemandem.
quelle
Der richtige Weg wäre:
Es ist besser zu überprüfen, ob eine Klasse vorhanden ist, bevor Sie sie verwenden. Sie vermeidet schwerwiegende Fehler, wenn das Plugin deaktiviert ist.
Sie können eine Klasse, die in PHP nicht zulässig ist, nicht erneut deklarieren.
Sie können die Klasse auch erweitern:
Aber die meiste Zeit und in diesem Fall mit WooCommerce sollten Sie besser einen Haken in der Dokumentation finden, der den Job erledigt.
quelle