muplugins_loaded : Le hook de la semaine n°15

muplugins_loaded : Le hook de la semaine n°15

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 ?

Lire la suite

Vous aimez ? Partagez !


Réagir à cet article

120 caractères maximum