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?
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 = 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();
}
}
nous devons d'abord instancier la classe et l'enregistrer
$ fm = new MyPlugin ();
$ fm-> register ();
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