muplugins_loaded : Le hook de la semaine n°16

muplugins_loaded : Le hook de la semaine n°16

De quoi ?

muplugins_loaded, rien à voir avec « mu » comme « WordPress MU », mort en 2010 pour devenir « WordPress MultiSite », nonon. C’est le « MU » de « Must Use« . Pour rappel, ces plugins se trouvent par défaut dans /wp-content/mu-plugins/, dossier à créer si vous ne l’avez pas encore, les fichiers .php sont automatiquement chargés, qu’ils contiennent une entête de plugin correcte ou pas.

Mais quand ?

C’est un hook qui est obligatoirement utilisé dans un mu-plugin car il est déclenché avant les plugins (ceux à activer), et avant le fichier functions.php du thème. Donc forcément, vous devez l’utiliser dans ces plugins auto chargés.

Et pourquoi ?

Pourquoi l’utiliser ? Quelles utilisations pourraient-on faire avec ce hook et dans ce cas pourquoi ne pas le faire directement avec un plugin sur le hook plugins_loaded qui est son collègue. Et bien justement, pour empêcher un plugin de se charger par exemple !

Et comment ?

Je vais devoir utiliser 2 hooks en fait, mais l’intérêt de la démo réside bel et bien dans l’utilisation du premier, celui de cet article : muplugins_loaded. Le second sera option_ qui est assez proche de pre_option_ à la différence qu’avec lui on peut d’abord lire la vraie option avant d’intervenir dessus, là où pre_option_ intervient avant la lecture et l’empêche par la suite. bref.

Une démo !

Mon exemple est donc d’empêcher le chargement de plugins particuliers, selon une condition. Ce sera « si je suis sur la page de login, je ne charge pas tel ou tel plugin ». Je vais pour mon cas ne pas charger les plugins « WP Rocket » et « Hello Dolly » si nous sommes sur la page wp-login.php.

<?php
/*
Plugin Name: Do not load this plugins
Description: Do not load this plugins on wp-login.php page
Author: Julio Potier
*/

add_action( 'muplugins_loaded', 'pre_baw_do_not_load_this_plugin' );
function pre_baw_do_not_load_this_plugin() {
if( '/wp-login.php' == $_SERVER['SCRIPT_NAME'] ) {
add_filter( 'option_active_plugins', 'baw_do_not_load_this_plugin' );
}
}

function baw_do_not_load_this_plugin( $plugins ) {
$do_not_load_this = array( 'wp-rocket/wp-rocket.php', 'hello.php' );
$plugins = array_diff( $plugins, $do_not_load_this );
return $plugins;
}

Lors de muplugins_loaded je vérifie si je suis sur la page de login. J’aurais voulu utiliser la variable globale $pagenow mais elle n’est déclarée qu’un peu plus tard, donc je le fais avec $_SERVER[‘SCRIPT_NAME’].

Si je suis sur cette page, alors j’ajoute mon second hook option_active_plugins qui est donc le hook option_ sur l’option des plugins actifs : active_plugins !

J’ai donc dans ma deuxième fonction les plugins qui sont prêts à être chargés, je vais simplement retirer les plugin qui m’interesses.

That’s all folks

C’est tout ! Maintenant si je suis sur la page de login, je ne charge plus ces plugins !

Envie de l’utiliser ?

Vous aimez ? Partagez !


Réagir à cet article

220 caractères maximum