web-dev-qa-db-fra.com

Comment enregistrer le hook d'activation et de désactivation dans le plugin en utilisant OOP modèle

J'ai besoin de savoir comment écrire une fonction pour enregistrer activation_hook et deactivation_hook après OOP à la mode avec les meilleures pratiques .

Je sais que nous pouvons effectuer certaines tâches à l'intérieur de l'activation/désactivation de plug-in, ce qui est essentiel dans certains cas, par exemple pour créer des plug-ins professionnels.

Merci.

3
magento_psycho

Cela peut être démontré comme ceci:

Étape 1: Créez un dossier nomméincludes(ou le nom de votre choix) dans le dossier racine du plug-in. Créez deux nouveaux fichiers nommés class-responsive-slider-activator.php et class-responsive-slider-deactivator.php
Maintenant, dans class-responsive-slider-activator.php créer une classe -

class Responsive_Slider_Activator {

    public static function activate(){
         //do your codes to execute upon activation

    }
}

et dans class-responsive-slider-deactivator.php créer une autre classe-

class Responsive_Slider_Deactivator {

    public static function deactivate(){
         //do your codes to execute upon deactivation

    }
}

Étape 2: Dans le fichier de plug-in principal, créez des fonctions et enregistrez les deux points d'ancrage -

// this code runs during plugin activation
function activate_responsive_slider(){

   require_once plugin_dir_path( __FILE__ ).'includes/class-responsive-slider-activator.php';

   Responsive_Slider_Activator::activate();
}

register_activation_hook( __FILE__, 'activate_responsive_slider');


// this code runs during plugin deactivation
function deactivate_responsive_slider(){

   require_once plugin_dir_path( __FILE__ ).'includes/class-responsive-slider-deactivator.php';

   Responsive_Slider_Deactivator::activate();
}

register_deactivation_hook('__FILE__', 'deactivate_responsive_slider');

C'est tout.

N.B. - Selon votre intérêt, je voudrais signaler qu'il existe certaines tâches essentielles pouvant être accomplies via des crochets d'activation et de désactivation, tels que:

  1. Validation des autres plugins dépendants lors de l'activation.
  2. Création de tables de base de données personnalisées lors de l'activation pour stocker des données et suppression des tables lors de la désactivation.
  3. Création d'options personnalisées pour les plugins dans l'activation et réinitialisation dans la désactivation.
  4. Toute autre tâche nécessaire doit être exécutée lors de l'activation. etc
2
perfectionist1

Eh bien là j'ai les moyens ci-dessous mieux-

// in the main plugin file
define( 'PLUGIN_BASE_FILE', __FILE__ );

class MainClass {
    public static function init() {
        register_activation_hook( PLUGIN_BASE_FILE, array( 'MainClass', 'install' ) );
    }

    public static function install() {
        // Do what ever you like here.
    }
}

MainClass::init();

Une autre façon serait de définir une classe et de l'instancier à l'aide de la méthode __construct, créer une propriété avec la valeur __FILE__. L'appel le register_activation_hook dans la fonction init. Comme ci-dessous

class MainClass {

    public $file;

    public function __construct( $file ) {
        $this->file = $file;
    }

    public function init() {
        register_activation_hook( $this->file, array( $this, 'install' ) );
    }

    public function install() {
        // Do what ever you like here.
    }
}

// This part must have to be done in main plugin file.
$class = new MainClass(__FILE__);
$class->init();

Mais, cette instanciation doit être faite dans le fichier principal du plugin.

J'espère que cela pourra aider.

2
CodeMascot