Petit tour d’horizon des mu-plugins pour WordPress

WordPress, vous connaissez bien sûr. Vous apportez même des modifications à votre thème. Comme beaucoup de gens, vous tirez profit des centaines de tutoriels présents sur la toile pour ajouter des petites fonctionnalités à votre site régulièrement : un shortcode par ici, un widget par là… Toutes ces choses pour lesquelles vous pourriez sûrement utiliser une extension. Mais quand il suffit de coller quelques lignes de code dans votre fichier functions.php, pourquoi pas ?

Oui, mais…

Le problème avec cette méthode, c’est que tous ces petits bouts de code s’accumulent, et qu’on fournit par perdre un peu le fil de ce qu’on a ajouté. L’autre problème, c’est que si vous décidez de changer de thème WordPress demain, il vous faudra plonger dans votre fichier functions.php, et essayer de comprendre et de trier parmi ces bouts de code que vous aviez ajouté l’année dernière…

Heureusement, il y a une solution plus simple. Pourquoi ne pas créer une extension “mu” pour y regrouper tous ces bouts de code que vous avez collecté ?

  1. Vous assurez ainsi la portabilité de ces données. Vous chanqez de thème, votre extension vous suit.
  2. Vous faites un peu de rangement dans vos bouts de code.
  3. En créant cette extension, et en la mettant à jour plus tard, vous allez peut être vous rendre compte que certaines des fonctionnalités que vous recherchez sont déjà présentes dans d’autres extensions, ou bien ne sont pas vraiment nécessaires.
  4. Cette extension pourra ensuite vous servir de base pour vos autres projets WordPress : à chaque nouvelle installation, plus besoin d’aller chercher ce dont vous avez besoin, il vous suffit d’activer votre extension déjà toute prête.

Extension WordPress “classique” VS extension “mu”

Avant de rentrer dans les détails, voyons donc ce que c’est qu’une extension “mu”. Celles-ci sont relativement peu utilisées, malgré leur utilité.

“mu” ne veut pas dire multi, et n’a rien à voir avec l’ancienne version de ce qui est aujourd’hui devenu WordPress multi-site. les “mu-plugins” sont des extensions “must-use”, qui tournent sans avoir besoin d’être activées, et qui ne peuvent d’ailleurs pas être désactivées depuis le panneau d’administration de WordPress. Vous pouvez quand même les visualiser, dans une liste spéciale (notez la mention “Must-Use”).

Ces extensions sont presque comme les autres, sauf que vous les placez dans un dossier “mu-plugins” dans wp-content. Si ce dossier n’est pas créé, vous pouvez le faire directement via votre logiciel FTP favori.

Quelques limitations cependant :

  • Le code placé dans ce type de plugins est exécuté à chaque chargement de page WordPress.
  • Seuls les fichiers .php placés directement à la racine de wp-content/mu-plugins seront lus. Vous ne pouvez donc pas créer d’extension contenue dans un sous-dossier du type wp-content/mu-plugins/my-plugin/plugin.php. Vous pouvez cependant utiliser des sous-dossiers pour organiser vos librairies et feuilles de style. Pour y faire référence, vous pouvez utiliser la constante WPMU_PLUGIN_DIR
  • Pas besoin d’ajouter d’en-tête comme pour les extensions classiques, mais en même temps, rien ne nous empêche de documenter un minimum ce qu’on fait :) Et si vous renseignez toutes les informations habituelles, votre page admin listant les plugins comportera toutes ces explications.
  • Si votre installation WordPress utilise Multisite, votre extension va être activée sur tous les sites de votre réseau.
  • Les extensions présentes dans ce dossier ne pourront pas être mises à jour automatiquement comme les extensions standard de WordPress lorsque vous les avez téléchargées sur le repo.

Ce n’est donc pas une bonne idée d’y placer toutes vos extensions habituelles, et c’est tant mieux, parce que ce n’est pas fait pour ça !

Avant de créer votre propre extension “mu”

Tout d’abord, faites le tour des extensions du repo faites pour le dossier mu-plugins. Je parie que vous allez y trouver des petites perles dont vous me direz des nouvelles.

Ensuite, faites le tour des fonctionnalités que vous utilisez via votre thème, et que vous aimeriez garder même si vous changez de thème. Voici quelques exemples, ajoutez les vôtres en commentaires, j’agrandirai la liste !

  • Le tracking Google Analytics
  • Les metas de vérification pour Google et autres
  • Vos shortcodes, afin d’éviter de perdre du contenu et de vous retrouver avec des choses comme [supershortcode]blabla[/supershortcode]. Le style de votre contenu peut être attaché à votre thème, mais si cela concerne le contenu à proprement parler, je pense que cela devrait être dans un plugin, ou dans un mu-plugin.
  • Changements de votre interface admin : retirer certains éléments du dashboard par exemple.
  • Changements du look d’admin, si vous avez effectué des customizations de la fenêtre de login WordPress par exemple.
  • Si vous êtes super-administrateur d’un réseau multisite, c’est aussi un bon moyen d’activer des plugins ou des fonctionnalités que vous ne voulez pas montrer aux admins sur le réseau, ou que vous ne voulez pas qu’ils puissent désactiver.

Ce qui ne rentre pas dans cette liste a sûrement sa place dans une extension classique, ou bien n’est pas vraiment utile.

Quelques astuces pour vous aider à vous organiser

Voilà, vous savez tout. Je vous laisse faire l’essai, et me dire ce que vous en pensez !

Je finirai tout de même par quelques petites astuces. Si vous en avez à ajouter, n’hésitez pas à commenter !

Commentez votre code ! Si vous n’y prêtez pas attention, votre plugin va lui aussi devenir bien bordélique. Pour éviter cela, commentez votre code ! Avant chaque fonction, expliquez le but et le fonctionnement de celle-ci, histoire d’aider votre futur vous-même qui viendra y jeter un coup d’oeil dans un an.

Ajoutez un sommaire. Rien de plus simple pour vous y retrouver : un petit sommaire en début d’extension pour lister tous ces bouts de code.

Ajoutez un changelog. Les extensions WordPress classiques comprennent toutes un fichier important : le readme.txt. Dans celui-ci, le paragraphe Changelog vous permet de commenter chaque mise à jour du plugin. Dans le cas d’une extension “mu”, pas besoin de readme.txt, mais vous pouvez insérer ce changelog en commentaire dans votre extension directement.

Sources

8 replies on “Petit tour d’horizon des mu-plugins pour WordPress”

Hervé says:

Bonjour,

C’est pile poil ce que je cherchais. :-) car il n’y a pas beaucoup de doc sur mu-plugins.
Je souhaiterai en effet avoir un seul fichier à mettre à jour pour un wp multi-site mais sans faire un fichier fucntions par thème.

J’arrive bien a restreindre l’affichage pour les admins de site mais je voudrai avoir en tant que super-admin la totalité de l’affichage (sans restrictions)

Mon problème c’est que ce qui passé sans problème dans le fichier functions ne fonctionne plus sous mu-plugins.

if ( is_admin() AND !is_super_admin() ) {
if (file_exists(ABSPATH .’..foncts_admin-seul.php’) ) {
require_once(ABSPATH . ‘../foncts_admin-seul.php’);
}
Ce qui ne passe plus c’est le test !is_super_admin(). J’ai essayé d’autre chose (sur recommandation forum wp):
current_user_can (‘activate_plugins’)
current_user_can(‘manage_network’)
$current_user->user_level <10

Rien ne fonctionne.
Une idée pour faire tester ce rôle de super-admin !??

Merci d'avance
A+

Jeremy says:

Si je comprends bien ce que tu veux faire, tu voudrais afficher des options pour les admins, et plus d’options pour les super admins, c’est bien ca ?

C’est vrai que dans ce cas, current_user_can est plus approprié : is_admin ne vérifie pas le role d’admin, mais seulement si tu es sur la page wp-admin (tableau de bord).

Par contre, si aucune des solutions que tu as essayées n’a marché, pourquoi ne pas utiliser is_network_admin ? Comme is_admin, cette fonction ne vérifie pas un role, mais sur quelle page tu es. En l’occurence, si tu es sur une des pages wp-admin/network/.
Je n’ai pas testé, mais ca devrait marcher.

Bon par contre comme tu ne vérifies pas les roles, il peut arriver qu’une personne non super admin puise accéder aux options si elle connait la page…

Hervé says:

Bonjour,

Merci d’avoir pris le temps de me répondre.

C’est bien sur les pages de “wp-admin/” et non “wp-admin/network/” que je veux agir.
J’ai restreint l’affichage de ces pages dans wp multisite pour les admin ou en leur mettant plus d’aide en lligne.

Par contre, en simplifiant, je veux en tant que super-admin avoir accès à la totalité des fonctions.

J’ai effectivement l’impression que c’est difficile, car je n’ai pas eu non plus de réponse sur le forum ou vu de pages en anglais !!

Grégory says:

J’ai récemment créé un article sur les généralités des plugins WordPress et, ce faisant, j’ai eu vent des “must-use plugins”. Au départ, j’étais assez dubitatif mais avec cet article, c’est nettement plus clair. Merci !

Une question, cependant : vu que les scripts posés dans ce répertoire sont exécutés sans avoir eu besoin de la moindre activation, cela ne représente-t’il pas une faille potentielle de sécurité ?…

Jeremy says:

Pour que ces plugins soient activés, il faut qu’ils soient présents dans le dossier mu-plugins de votre installation WordPress. Pas de faille de sécurité donc, puisque vous devriez être le seul à avoir accès à votre site via FTP.

Grégory says:

Merci pour la confirmation.

[…] Je pensais écrire un article consacré aux mu-plugins mais j'ai trouvé une excellente référence en français : voici le lien. […]

[…] Pour en savoir plus sur les mu-plugins, voici un lien assez complet. […]