web-dev-qa-db-fra.com

Est-ce qu'un plugin activé signifie automatiquement que ses méthodes sont disponibles pour d'autres WP les fonctions?

J'ai créé un plugin WordPress comme ceci:

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

Après avoir installé et activé le plugin, puis-je utiliser cette classe dans d'autres plugins sans inclure le fichier myclass.php? Par exemple, dans un autre plugin:

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

Techniquement, c'est possible. Mais j'utiliserais une approche légèrement différente. Si votre deuxième plugin est chargé en premier, vous obtenez une erreur. Si vous voulez remplacer la classe dans un autre plugin, c'est difficile à faire.

Alors connectez-vous à plugins_loaded avec une priorité spécifique pour créer l'objet et utilisez l'objet de votre deuxième plugin sur le même point d'ancrage avec une priorité inférieure (ultérieure):

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. */
}

Notez le 10 et le 11 dans add_action()? Cela garantit que votre deuxième plugin ne fonctionnera jamais avant le premier. Il doit encore vérifier si le premier plugin est actif et fonctionne.

Maintenant, vous pouvez même remplacer la classe dans un autre plugin:

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

Seul le fichier du plugin principal sera inclus automatiquement. Donc, si votre plugin est structuré comme ceci:

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

Seul my-plugin.php sera inclus par WordPress. Vous pouvez vous assurer que MyClass est disponible pour les autres en incluant my-class.php à partir de votre fichier my-plugin.php.

3
Jan Fabry

la réponse de toscho a très bien fonctionné! Juste pour ajouter, si vous créez un plug-in extensible avec des add-ons, les add-ons peuvent toujours être de la POO.

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