Connaissez-vous les Must-Use Plugins ?

Dans nos thèmes, très/trop souvent, nous ajoutons des extraits de code (snippets) dans notre fichier functions.php. Cela fonctionne très bien, mais que faire lors d'un changement de thème ou si nous souhaitons ajouter nos supers snippets sur d'autres installations WordPress?

Heureusement les Must-Use Plugins sont là !

must-use-plugin-wordpress

Qu'est ce qu'un MU Plugin ?

Un MU Plugin ou Must-Use Plugin, à ne pas confondre avec Multi-Utilisateurs, en effet on dit Must-Use pour "doit être utilisé". En simplifiant, on pourrait résumer cela en "un plugin à utiliser avant tous les autres".

Très souvent, les MU plugins se composent d'un seul fichier PHP dans lequel vous ajoutez du code et placés dans un répertoire spécifique (que vous devrez créer).

Les MU plugins, bien qu'ils apparaissent dans la liste des plugins installés, ne peuvent pas être désactivés, sauf en supprimant le fichier du plugin dans le répertoire Must-Use qui se trouve par défaut dans /wp-content/mu-plugins/.

Pour changer ce répertoire par défaut manuellement, définissez WPMU_PLUGIN_DIR et WPMU_PLUGIN_URL directement depuis votre fichier wp-config.php.

S'il est possible d'ajouter un plugin complet (dossier incluant des fichiers et sous-répertoires) ce n'est pas conseillé, nous verrons ci après pourquoi.

 

A quoi ça sert ?

Un Must-Use plugin peut être une solution idéale pour régler vos Custom Post Types, vos Taxonomies, vos shortcodes, votre suivi Analytics ou tous les autres morceaux de code (snippets) pas nécessairement "updatables" mais qui seront irrémédiablement perdus en cas de changement de thème.

Introduits et initialement mis en œuvre par WPMU (Multi-User) pour permettre à l'admin d'activer facilement les plugins par défaut sur tous les blogs de la batterie, les fonctions des MU Plugins étaient manquantes à l'époque, aujourd'hui le Multisite WordPress a des options natives pour gérer tous les plugins directement depuis l'administration.

 

Les avantages d'un MU-Plugin

Son utilisation amène plusieurs avantages non négligeables en effet un Must-Use (MU) Plugin est :

  • toujours activé par défaut, pas besoin de le faire via l'admin et les utilisateurs ne peuvent pas le désactiver par erreur,
  • activé simplement en uploadant le fichier dans le répertoire /mu-plugins/ et sans même avoir à ouvrir de session,
  • chargé par le PHP, dans l'ordre alphabétique et avant tous les plugins standards.

Vous l'avez compris, c'est puissant et utile dans certains cas.  Vous conserverez ainsi vos précieux petits morceaux de code même lorsque vous changerez de thème, votre client ne pourra pas les désactiver ou les supprimer.

Enfin, cette extension pourra vous servir de base pour toutes vos autres installations WordPress, ainsi à chaque nouvelle installation, il vous suffira d'insérer le répertoire /mu-plugins/ ;)

 

Mais aussi ses inconvénients

Ne négligez pas les inconvénients de l'utilisation des MU-Plugins :

  • Les plugins placés dans le répertoire /mu-plugins/ n’apparaîtront pas dans les notifications de mise à jour,
  • les hooks d'activation ne sont pas exécutés dans le répertoire /mu-plugins/. Ces hooks sont utilisés par de nombreux plugins lors de leur installation et/ou désinstallation,
  • WordPress ne regarde que les fichiers PHP du répertoire /mu-plugins/, et (à la différence des plugins standards) pas les fichiers des sous-répertoires. Si vous placez un sous-répertoire, vous devrez obligatoirement créer un fichier de chargement PHP (voir ci-dessous) dans le répertoire.
<?php // mu-plugins/load.php
require WPMU_PLUGIN_DIR.'/mon-plugin/mon-plugin.php';

L'absence de notifications, l'exécution à chaque chargement de page WordPress, entre autres, font que ce n’est pas une bonne idée d’y placer vos extensions habituelles. De toute façon, les MU Plugins ne sont pas faits pour ça !

MU-Plugin-par-wpformation

 

Comment créer un MU Plugin ?

En trois étapes très simples, vous aussi créez votre MU Plugin:

  1. Via FTP, commencez par créer le répertoire /wp-content/mu-plugins/
  2. Ensuite, créez un fichier PHP. Vous pouvez le nommer comme bon vous semble, son chemin complet ressemblera à ça: /wp-content/mu-plugins/votrefichier.php
  3. Maintenant ajoutez le code dans votre fichier, sauvegardez, uploadez !

C'est fait ! Vous venez de créer votre premier MU Plugin ;)

 

Un exemple de MU Plugin

C'est bien tout ça mais je mets quoi dans ce fichier ? D'abord n'y mettez pas tout et n'importe quoi, placez-y les snippets importants qui encombrent votre functions.php. Voici ci-après un exemple de MU Plugin que vous pouvez utiliser sans risque.

Vous savez certainement que les navigateurs Safari ont du mal avec les fichiers images contenant des accents. Voici donc une solution simple à ajouter dans un MU plugin et que vous pourrez nommer supp-accents.php :

<?php
/*
MU Plugin: supp-accents
Description: supprimer les accents des images
Version1: 15 10 2014
*/
add_filter('sanitize_file_name', 'remove_accents' );
?>

Il vous suffit donc maintenant d'uploader ce fichier supp-accents.php dans votre répertoire /wp-content/mu-plugins/ et le tour est joué;)

N'oubliez pas dans les commentaires de votre code de nommer votre MU Plugin, d'y ajouter la description, la date et sa version. Cela pourra vous être utile!

Plus d'informations sur les MU Plugins dans le Codex ou chez l'ami Julio et d'avantages de snippets sur css-tricks.com/snippets/wordpress/

 

A l'instar de WordPress, les MU plugins
c'est juste simple et efficace ! Envie d'essayer ?

 

A propos de l'auteur...

WPFormation

Fabrice Ducarme, formateur WordPress je suis éditeur, auteur et fondateur du site WP Formation.com. Conférencier lors des WordCamp Paris 2013 & 2015 ainsi qu'au WP Tech Nantes 2014, je vous propose plus de 400 articles & tutoriaux à propos de WordPress, mes trucs & astuces mais aussi des coups de gueule...

16 commentaires pertinents à ce jour ;)

  • Sébastien dit :
    Hello Fabrice,
    Si j’ai bien compris, les MU plugins pourraient se substituer aux thème enfant ? Non ? Cela me fait un peu peur car j’évite de passer le plus possible par le FTP. Ne pourrais-je ajouter les lignes de codes directement dans le fichier functions.php de mon thème enfant ? Suffit-il que je n’ajoute que : add_filter(‘sanitize_file_name’, ‘remove_accents’ ); (je sais je suis nul en PHP. :)
  • WPFormation dit :
    @Sébastien, oui bien sûr tu pourrais mais… si tu changes de thème? Tu perds tout!

    Les MU Plugins, c’est aussi un moyen rapide de mettre en place nos optimisations sur nos autres installs WordPress en un simple upload FTP. Des fonctions que les autres utilisateurs ou clients ne pourraient pas désactiver ou supprimer.

    Pour ma part, j’y mets des options pour éviter la duplication interne, supprimer les accents et guillemets à la française, des options de sécu, etc…

    Bref, les MU Plugins c’est puissant et quand on y a goûté, difficile de s’en passer ;)

  • w3p-annuaire dit :
    Bonjour,
    J’utilise le mu-plugins comme un plugin,c’est à dire qu’il est déclaré dans les plugins.Cela fonctionne très bien sur plusieurs de mes sites.J’ai sûrement fait une erreur en l’utilisant de cette façon mais j’y trouve quelques avantages.
    La modification est fort simple à partir de l’admin extensions,pour ajouter un morceau de code et de l’enregistrer.
    S’il y a une erreur dans le code,le mu-plugins se désactive automatiquement.
    Il nous donne l’erreur,son emplacement et la syntaxe a modifier.
    Une fois la correction effectuée,si le résultat est bon,le mu-plugins se réactive.
    J’ajoute que tous les snippets fonctionnent parfaitement (code analutic,pub et autres).
    Donc ,vous préconisez d’utiliser le mu-plugins dans wp-content si j’ai bien compris le sens de votre article!
    merci
  • WPFormation dit :
    , je vois plusieurs failles dans votre raisonnement:

    1/ Ce n’est plus un MU Plugin alors mais un plugin! « Must Use » = doit être utilisé et placé dans le répertoire adéquate.

    2/ Les utilisateurs ou éventuels clients peuvent donc désactiver votre plugin, ce n’est pas le cas pour un MU plugin, il faudra nécessairement passer par le FTP.

    3/ Permettre l’édition de fichiers via l’admin WordPress est dangereux (j’en ai fait l’expérience), c’est aussi pourquoi j’ajoute désormais à tous mes WordPress un MU Plugin contenant:

    define('DISALLOW_FILE_EDIT',true);

    4/ Enfin, si il y a une erreur dans le code de mon MU, une simple désactivation via FTP et le tour est joué!

    Je préconise l’utilisation des MU Plugins afin d’éviter de perdre vos snippets importants (sécu, optimisation) et afin d’empêcher la suppression ou désactivation éventuelle des fonctions que j’estime nécessaires pour WordPress;)

  • Li-An dit :
    Oui, je connaissais :-) Le coup des accents dans les noms d’images me paraît un peu étrange puisqu’il me semblait que la bibliothèque médias WP ne supportait pas les accents justement ?

    Sinon, je trouverais bien un code pour y placer mon suivi Piwiks – mais est-ce que le javascript sera géré alors par les plugins de minification ?

  • WPFormation dit :
    Je m’en doute ;)
    Pour les accents et bien non! En tout cas pas sur wpformation… Des 404 en hausse (2 images avec accents) m’ont conduit à rajouter le snippet afin de ne pas reproduire la boulette!

    Pour le Js, pourquoi ne le serait-il pas ?

  • tendanceaumasculin.fr dit :
    Sujet intéressant surtout pour cette notion de lignes de codes que l’on souhaite absolument gardé en cas de changement de thème.

    Je teste donc et vlan page blanche ;-)
    Je suppose que cela vient de la fonction en elle même (fonction qui bien sur fonctionne dans function.php) :

    Une confirmation que ce type de code ne peut-être implantée?

  • WPFormation dit :
    Bonjour ,

    Cela vient forcément de la fonction, toutefois cette dernière (exemple donné ici) fonctionne parfaitement sur ce WordPress et d’autres. La vôtre est-elle correctement écrite ? (Espace, bon format, écrit avec un bloc note c’est sans risque;)

  • tendanceaumasculin.fr dit :
    En tout logique le code que j’ai voulu copié collé dans mon commentaire précédent à été zappé.
    En fait il s’agit d’un code collé dans function.php qui indique à wordpress qu’au cas où un utilisateur n’a pas de gravatar personnalisé, le CMS doit aller chercher l’icone personnalisée qui est stockée dans un répertoire image du thème. (astuce gravatar inconnu)

    Autre chose, ces MU plugins servent à alleger notre fichier functions.php
    Hors en début d’article on parle de code suivi analytics? C’est un morceau de code qui est collé dans mon header pour ma part? tout comme plusieurs clés de vérification (google, yahoo, alexa etcetc)
    Est ce qu’il serait possible de créer un MU-plugin comprenant toutes ses lignes?

  • WPFormation dit :
    Je ne dirais pas alléger au sens stricto senso, mais plutôt afin de ne pas perdre nos chers codes, empêcher la désactivation et simplifier nos installations WordPress futures.

    Oui, on peut aussi ajouter nos codes de suivi, jamais testé car mon thème le gère en natif. En revanche à titre personnel, j’utilise 1 MU par fonction.

  • notre annuaire dit :
    Je reviens vers vous,car j’ai une autre question:si j’ai bien compris,vous utilisez un MU par fonction!Donc pour ma part,j’ai placé dans mon MU,google analytic,des shortcodes,une modification sur ma page login etc…

    Alors si je suis votre commentaire,je crée un :

    MU pour : google analytic
    un MU : pour mes shotcodes et ainsi de suite…..

    Est-ce bien cela? ou est-ce que je continue à faire comme maintenant,c’est à dire placer tous les snippets dans le même MU

    Hier,juste après la lecture du sujet,j’ai replacé mon MU dans le dossier wp-content.J’ai vérifié ce matin les résultats et tout fonctionne normalement.
    Merci …

  • WPFormation dit :
    Dans l’absolu, c’est la meilleure des options: 1 MU par Fonction!
    Les MUs dans leur dossier /wp-content/mu-plugins/ c’est mieux ;)

    Ainsi il est plus facile d’en désactiver/activer une, savoir celle qui bug, etc…

  • Ouistiti dit :
    J’ai fait le test en local.
    Ben non, je ne sais pas pourquoi, il n’y a rien qui s’affiche dans l’onglet des plugins. Mon fichier est placé: /wp-content/mu-plugins/astuces.php

    Il y a bel et bien l’appel du fichier, car si je déplace <? php sous les commentaires le texte s'affiche dans le header.

    Pour moi c'est un mystère :)

  • WPFormation dit :
    , essayez donc le MU en ligne ;)
  • Ouistiti dit :
    Roôôo!! je dis des bêtises… Je n’ai pas vu -> Automatiques (Must-Use). Par contre, j’ai le même souci que tendanceaumasculin.fr. Donc, je vais créer plusieurs fichiers pour chaque fonction.

    Merci!

  • Stephen dit :
    Pour ma part je utilises les mu pour la mise en sécurité , pour la modification du back end et du front end ( bien sur uniquement des choses liees a l’utilisation d’un client).
    Un mu pour les sauvegardes de la bdd et du répertoire. Un mu pour la mise en cache , car les mu sont appelé avant les plugins. Ensuite c’est selon les clients et leurs projets. Tout ce qui est google analytics, sitemap … Je creer un plugins car je pense comme si cela fonctionnait sur un wordpress multi site. En pensant multi site , on arrive mieux a cerner ce qui va dans les mu plugins.
Tweet90
Share20
Share4
Buffer86