[WordPress] Activer/Désactiver des plugins à la demande et automatiquement


Les plugins sont clairement un des atouts majeurs de WordPress. Mais ils peuvent aussi être un des gros problèmes si l’on n’y prend pas garde. Installer et activer trop de plugins peut conduire à un blog lent, voire pire, qui ne fonctionne pas.

Certains plugins ne servent que rarement (attention, je n’ai pas dit qu’ils sont inutiles); par exemple les plugins qui permettent de défragmenter la base, les plugins qui scrutent la sécurité, les plugins de debug, les plugins de nettoyages divers, … la liste est longue.

Voici une hack qui vous permettra d’activer (ou désactiver) un ou plusieurs plugins lors de l’appel d’une fonction spécifique.

 
Par défaut, WordPress stocke les plugins actifs dans la table des options (wp_options), dans la clé active_plugins dont la valeur ressemble à cela :

a:27:{i:0;s:19:"akismet/akismet.php";i:1;s:31:"article-templates/templates.php";i:2;s:37:"better-seo-slugs/better-seo-slugs.php";i:3;s:35:"...}

Pour activer un plugin, il suffit donc d’ajouter le chemin vers le fichier principal d’un plugin dans ce champ :

function my_activate_plugins() {
   if ( ! current_user_can('activate_plugins') )
      wp_die(__('You do not have sufficient permissions to activate plugins for this site.'));
   $plugins = FALSE;
   $plugins = get_option('active_plugins'); // get active plugins
   if ( $plugins ) {
      // plugins to active
      $pugins_to_active = array(
         'hello.php', // Hello Dolly
         'adminimize/adminimize.php', // Adminimize
         'akismet/akismet.php' // Akismet
      );
      foreach ( $pugins_to_active as $plugin ) {
         if ( ! in_array( $plugin, $plugins ) ) {
            array_push( $plugins, $plugin );
            update_option( 'active_plugins', $plugins );
         }
      }
   }
}

Pour désactiver, il suffirait d’utiliser unset() sur le nom de la clé.

Dans cet exemple issue du site WPEngineer, la fonction my_activate_plugins() est appelée grâce au hook d’action admin_init

add_action( 'admin_init', 'my_activate_plugins' );

Mais on pourrait très bien imaginer appeler celle-ci au chargement d’une page, laquelle serait appelée par vos soins au besoin, ou via le planificateur WP_Cron, régulièrement.

A vous d’imaginer vos groupes de plugins à activer ou désactiver.

Source