Bedeutet ein aktiviertes Plugin automatisch, dass seine Methoden anderen WP-functionen zur Verfügung stehen?

Ich habe ein WordPress-Plugin wie folgt erstellt:

Class MY_CLASS { //codes } Global $myclass; $myclass = New MY_CLASS (); 

Nachdem ich das Plugin installiert und aktiviert habe, kann ich diese class in anderen Plugins verwenden, ohne die Datei myclass.php einzuschließen? Zum Beispiel in einem anderen Plugin:

 Global $myclass; $myclass->a = 'dog'; 

Solutions Collecting From Web of "Bedeutet ein aktiviertes Plugin automatisch, dass seine Methoden anderen WP-functionen zur Verfügung stehen?"

Technisch ist es möglich. Aber ich würde einen etwas anderen Ansatz verwenden. Wenn Ihr zweites Plugin zuerst geladen wird, erhalten Sie einen Fehler. Wenn Sie die class in einem anderen Plugin ersetzen möchten, ist dies schwierig.

So hook in plugins_loaded mit einer bestimmten Priorität, um das Objekt zu erstellen und das Objekt in Ihrem zweiten Plugin auf demselben Hook mit einer niedrigeren (späteren) Priorität zu verwenden:

Plugin 1

 add_action( 'plugins_loaded', array ( 'My_Class', 'init' ), 10 ); class My_Class { /** * Handler for the action 'init'. Instantiates this class. * * @since 0.1 * @return void */ public static function init() { // Named global variable to make access for other scripts easier. $GLOBALS[ __CLASS__ ] = new self; } public function __construct() { /* Do something awesome. */ } } 

Plugin 2

 add_action( 'plugins_loaded', 'depending_operation', 11 ); function depending_operation() { if ( empty ( $GLOBALS[ 'My_Class' ] ) ) { return; } /* Do something awesome again. */ } 

Beachten Sie die 10 und die 11 in add_action() ? Dies garantiert, dass Ihr zweites Plugin niemals vor dem ersten ausgeführt wird. Es muss immer noch überprüft werden, ob das erste Plugin aktiv ist und funktioniert.

Jetzt können Sie die class sogar in einem anderen Plugin ersetzen:

Plugin 3

 add_action( 'plugins_loaded', 'replace_global_class', 12 ); function replace_global_class() { $GLOBALS[ 'My_Class' ] = new Replacement_Class; } class Replacement_Class {} 

Nur die Haupt-Plugin-Datei wird automatisch hinzugefügt. Also wenn dein Plugin so aufgebaut ist:

  • wp-content/plugins/my-plugin/
    • my-plugin.php
    • my-class.php

Nur my-plugin.php wird von WordPress my-plugin.php . Sie können sicherstellen, dass MyClass für andere verfügbar ist, indem Sie my-class.php in Ihre Datei my-plugin.php .

toschos Antwort hat super funktioniert! Wenn Sie ein Plugin erstellen, das mit Add-Ons erweiterbar ist, können die Add-Ons weiterhin OOP sein.

Plug-in 2

 class My_Class_Addon(){ public function __construct() { /* Do something awesome as an addon to My_Class */ } } add_action( 'plugins_loaded', 'My_Class_Addon_loader', 11 ); function My_Class_Addon_loader(){ if(empty($GLOBALS[ 'My_Class' ])){ return; } $this_my_class = new My_Class_Addon(); }