it-swarm.com.de

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

Ich habe ein WordPress-Plugin wie folgt erstellt:

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

Kann ich diese Klasse nach der Installation und Aktivierung des Plugins in anderen Plugins verwenden, ohne die Datei myclass.php einzuschließen? Zum Beispiel in einem anderen Plugin:

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

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

Hängen Sie sich also mit einer bestimmten Priorität in plugins_loaded ein, um das Objekt zu erstellen, und verwenden Sie das Objekt in Ihrem zweiten Plugin mit einer niedrigeren (späteren) Priorität für denselben Hook:

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 noch geprüft werden, ob das erste Plugin aktiv ist und funktioniert.

Jetzt können Sie die Klasse 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 {}
17
fuxia

Nur die Haupt-Plugin-Datei wird automatisch mit einbezogen. Also, wenn Ihr Plugin so aufgebaut ist:

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

Nur my-plugin.php wird von WordPress aufgenommen. Sie können sicherstellen, dass MyClass für andere verfügbar ist, indem Sie my-class.php aus Ihrer my-plugin.php-Datei einfügen.

3
Jan Fabry

toschos antwort hat super geklappt! Um es hinzuzufügen, wenn Sie ein Plugin erstellen, das mit Add-Ons erweiterbar ist, können die Add-Ons immer noch 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();
}
0
adrock42