web-dev-qa-db-fra.com

Les fonctions d'activation / désactivation d'une classe doivent-elles être statiques?

La description de register_uninstall_hook's $callback états des paramètres:

Doit être une méthode ou une fonction statique.1

Il n'y a pas un tel commentaire pour register_activation_hook ou register_deactivation_hook. Cependant, dans l'entrée Codex pour register_activation_hook il y a un exemple qui lit:

Ou, parce que le crochet d'activation nécessite une fonction statique, si vous êtes à l'intérieur d'un __construct ():2

Dans un problème GitHub, "pourquoi activer une méthode statique?", Un utilisateur déclare:

Vous ne pouvez pas les définir comme des fonctions standard car elles nécessitent une instance du plugin pour se déclencher, mais vous ne pouvez pas instancier le plugin avant de lancer la fonction d'activation car le constructeur se déclenchera (même s'il est vide), donc les fonctions doivent être marqué comme statique afin que tout travail préliminaire requis pour préparer le plugin pour la désactivation/activation puisse être défini.

Lorsque vous utilisez des classes pour (dés) activer un plugin, les fonctions doivent-elles être statiques? Dans l'affirmative, l'explication de pourquoi est-elle correcte?

6
Spencer

Cela dépend de la façon dont vous souhaitez l'implémenter. Le statique est utilisé parce que vous n'avez pas à instancier la classe pour utiliser les fonctions de la classe. C'est à vous. Je ferais généralement:

<?php

/*it's good practice that every class has its own file. So put it in for example 'classes/class-hooks.php' and require it properly in your plugin file. */

class Hooks{
    static function activation(){
       //the code you want to execute when the plugin activates
    }

    static function deactivation(){
       //the code you want to execute when the plugin deactivates
    }

    static function uninstall(){
      //the code you want to execute when the plugin uninstalled
    }

}

...

// you should use this in your plugin file

register_activation_hook(__FILE__, 'Hooks::activation' );
register_deactivation_hook(__FILE__, 'Hooks::deactivation');
register_uninstall_hook(__FILE__, 'Hooks::uninstall');


C'est la manière simple que je sais de le faire et les plugins dont je lis le code le font généralement de cette façon. J'espère que cela pourra aider!

1
Lucas Vendramini

Dans mon dossier plugin j'ai créé un dossier nommé comprend qui ont deux fichiers php

# 1 = my-plugin-activate.php

<?php
/**
 * @package MyPlugin
 */

class MyPluginActivate {
   public static function activate() {
        flush_rewrite_rules();
   }
} 

# 2 - my-plugin-desactivate.php

<?php
/**
 * @package MyPlugin
 */

class MyPluginDeactivate {
   public static function deactivate() {
        flush_rewrite_rules();
   }
} 

Dans mon fichier principal php: my-plugin.php, j'ai requis ces deux fichiers au bas de la classe MyPlugin

  1. nous devons d'abord instancier la classe et l'enregistrer

    $ fm = new MyPlugin ();

    $ fm-> register ();

  2. il existe deux méthodes pour exiger le fichier externe activate.php et deactivate.php

    register_activation_hook ( [~ # ~] fichier [~ # ~] , array ($ fm, 'activate'));

    ou

    require_once plugin_dir_path ( [~ # ~] fichier [~ # ~] ). 'inclut/my-plugin-activate.php'; register_desactivation_hook ( [~ # ~] fichier [~ # ~] , array ('MyPluginActivate', 'activate'));

c'est pareil pour Désactiver

enter image description here

0
zahafyou