Comment ajouter des astuces sur votre site ?
« functions.php ? plugin ? mu-plugin ? »

La question est récurrente, je la vois très souvent dans les commentaires de ces astuces/tutos, que ce soit sur un site français comme geekpress.fr ou même américain.
La réponse habituelle, rapide et sans explications – et je la donne aussi, mea culpa – est :
« Mettez ça dans functions.php de votre thème« …
Je demande pardon à tous les fichiers functions.php martyrisés de notre faute, nous n’aurions pas dû vous solliciter autant.

Pourquoi se poser la question ?

Car régulièrement vous apportez des modifications à votre site en y ajoutant comme beaucoup de monde des petites fonctionnalités comme un shortcode, un widget etc

Toutes ces choses pour lesquelles vous voudriez éviter d’installer un plugin. En plus il suffit de coller quelques lignes de code dans votre fichier functions.php, pourquoi ne pas le faire !?

Le problème avec cette technique d’ajout, c’est que tous ces petits bouts de code s’accumulent encore et encore et qu’on fini par perdre le fil de ce qu’on a ajouté. « A quoi sert ça déjà ?« , « Et ça je le garde ? »

L’autre problème arrive lors du changement de thème, il vous faudra replonger dans le fichier functions.php et essayer de retrouver les bouts de code que vous aviez ajouté l’an passé pour les ajouter de nouveau dans le fichier functions.php du nouveau thème.

Rageant non ? Je vous propose d’autres solutions.

www/wp-content/themes/

www/wp-content/themes/

Les vrais solutions

En réalité il existe 3 solutions, 3 endroits où vous pouvez mettre les astuces et tutoriels. Pour choisir, je vais vous aider à vous poser les bonnes questions.

D’abord, précisons ce qu’est une astuce, ses différences avec un tutoriel et un plugin.

Astuce [n.f.]: Snippet (morceau) de code, généralement 2 fonctions et/ou 2 hooks maximum, moins de 30 lignes de code (sans commentaires).

Tutoriel [n.m.]: Pavé de code, généralement plus de 50 lignes de codes, plus complexe et plus long donc qu’une astuce.

Plugin [n.m.]: Autoroute de code, généralement plus de 100 lignes de code, parfois séparé en plusieurs fichiers, encore plus complexe.

Et l’exception qui confirme la règle :

Une astuce et un tutoriel peuvent tous les 2 être des plugins. Et un plugin peut faire 1 ligne de code. #toutçapourça

Questions pour un champion

Voici les 2 questions à se poser sous forme de diagramme :

Se poser les bonnes questions

Se poser les bonnes questions (https://www.circuitlab.com/)

(Reprise des questions au format texte pour le SEO)
Question 1 : L’astuce doit-elle persister si je change de thème ?

  • Si non : Cette astuce est à placer dans functions.php du thème.
  • Si oui,

Question 2 : Cette astuce peut-elle être désactivée sans gêner le site niveau fonctionnel ou visuel ?

  • Si non : Créez un mu-plugin pour cette astuce.
  • Si oui : Créez un plugin pour cette astuce

Je vous donne maintenant 3 mini tutos pour vous aider à insérer les astuces sur votre site :

Comment placer l’astuce dans « functions.php » ?

Prenons l’exemple du thème « TwentyThirteen » :

  1. Créez un thème enfant en suivant ce tutoriel Créer des thèmes enfants (child themes) avec WordPress
  2. Connectez vous sur votre gestionnaire de fichier en sFTP,
  3. Naviguez pour trouver « wp-content/themes/twentythirteen-child/functions.php« ,
  4. Téléchargez le, éditez le,
  5. Allez en fin de fichier, supprimez « ?> », si si supprimez moi ça, vous n’en avez pas besoin, cela évitera des erreurs de ligne vides ou blanc en fin de fichier,
  6. Copiez/collez l’astuce que vous avez trouvé en fin de fichier,
  7. Sauvegardez, téléversez le,
  8. L’astuce est activée.
Astuce "Guest Preview" dans functions.php

Astuce « Guest Preview » dans functions.php

Comment créer un plugin simplement ?

Créer un plugin, ces mots vous font peur ? Vous n’êtes ni codeur ni « programmateur » ? Pas de soucis, c’est simple !

  1. Créez un fichier « astuce_pour_faire_ceci.php » et éditez le,
  2. Ajoutez en début de fichier ce code que vous adapterez:
  3. <?php
    /*
    Plugin Name: Astuce pour faire machin
    Description: Trouvée sur http://geekpress.fr via @boiteaweb
    Version: 21 02 2013
    */
  4. Connectez vous sur votre gestionnaire de fichier en sFTP,
  5. Naviguez pour trouver « wp-content/plugins/« ,
  6. Vous pouvez créer un dossier « /astuces/ » pour bien vous organiser,
  7. Copiez/collez l’astuce que vous avez trouvé en fin de fichier,
  8. Téléversez le fichier,
  9. Le plugin est créé, activez le via la page habituelle des plugins.
Entête du plugin "Post Views Count"

Entête du plugin « Post Views Count »

Comment créer un mu-plugin ?

C’est quoi un mu-plugin ? Vous le savez ? Non, et bien je vous explique :
Un mu plugin est un plugin « à utiliser », un Must Use d’où le « mu ». Ces plugins sont la plupart du temps des fichiers seuls et se trouvent dans « /wp-content/mu-plugins« . Ce dossier n’existe pas à la création de votre site, à vous de le créer.

Ces fichiers seront les premiers à être inclus, avant même les plugins « network » (multisite) et avant les plugins « normaux ». Ces plugins ne peuvent pas être désactivés, vous les retrouverez dans la page des plugins mais aucun lien d’actions possible, et s’il vous plait, n’ajoutez pas de plugins permettant de les désactiver, c’est une hérésie.

Le fait de mettre une astuce ou un plugin en mu-plugins au lieu de plugin risque parfois de ne pas fonctionner car les constantes et posts types de WordPress ne sont pas encore chargés. Si vous comptiez ajouter du code « directement » dans le fichier et non via un hook, car via un hook ça fonctionne très bien ;)

Aussi certains vous diront « vous ne pouvez pas mettre un plugin complet dans mu-plugins » ce qui est totalement faux, si on sait coder en PHP, alors on sait inclure un plugin complet. Néanmoins et encore une fois, il se peut fortement qu’un plugin ne fasse pas bien son travail s’il se retrouve dans le dossier /mu-plugins.
Lien vers le codex : http://codex.wordpress.org/Must_Use_Plugins

Puis :

  1. Créez un fichier « astuce_pour_faire_ceci.php » et éditez le,
  2. Ajoutez en début de fichier ce code que vous adapterez:
  3. <?php
    /*
    Plugin Name: Astuce pour faire machin
    Description: Trouvée sur http://geekpress.fr via @boiteaweb
    Version: 21 02 2013
    */
  4. Connectez vous sur votre gestionnaire de fichier en sFTP,
  5. Naviguez pour trouver « wp-content/mu-plugins/« , ou créez le s’il n’existe pas,
  6. Ne créez pas de sous-dossier cette fois, seuls les fichiers à la racine seront ajoutés,
  7. Copiez/collez l’astuce que vous avez trouvé en fin de fichier,
  8. Téléversez le fichier,
  9. Le mu-plugin est créé et déjà actif.
Dossier "mu-plugins"

Dossier « mu-plugins »

J’espère que ce tutoriel vous aura éclairé sur le lieu où placer vos astuces et aussi sur les mu-plugins.
Je vous laisser déplacer vos astuces avant de revenir commenter ? ;)

Lire la suite

Vous aimez ? Partagez !

42 commentaires

  1. Adri · février 21, 2013
    L’idée de créer des petits plugins perso pour les astuces me plaît bien ! J’ai toujours un fichier functions.php de 3km et même en mettant des commentaires pour chaque astuce je m’y perds souvent. Merci pour cet article ;)
    • Julio Potier · février 21, 2013
      De rien, perso je fais des fichiers dans mu, ça ne prends pas de place dans l’écran des plugins, c’est top.
  2. Marian · février 21, 2013
    Encore un très bon article Julio. Je ne connaissais pas ce « mu-plugins » mais je le trouve bien utile, je m’en sers déjà sur un projet client pour éviter qu’il l’enlève la fonctionnalité.

    Je pense que ce schéma peut vraiment faire office de référence sur la décision à prendre entre fichier functions, plugins ou mu-plugins.

    • Julio Potier · février 21, 2013
      Merci à toi ! « mu-plugins » est méconnu oui, dommage !
  3. Jeremy · février 21, 2013
    Excellent article, ca va aider à faire passer le message à tout le monde, parce qu’il faudrait vraiment que ce genre de raisonnements rentrent dans les moeurs. Enfin je dis ça, mais il faudrait que je commence par éditer mes anciens articles qui mentionnent functions.php ! :)

    J’aurais tout de même une petite remarque, puisqu’on parle de « best practices » : au lieu de modifier le functions.php dans Twenty Thirteen, ce serait surement encore mieux d’ajouter toutes ces modifications dans un thème enfant.

    • Julio Potier · février 21, 2013
      C’est vrai, c’est bien mieux encore, j’édite !
  4. Diije · février 21, 2013
    Merci pour ce rappel, qu’il est vrai qu’on a vite tendance à oublier.
    Je rajouterais juste que pour plus de facilité de déploiement sur un nouveau site, il est possible bien souvent de mettre plusieurs astuces dans un seul (mu-)plugin :)

    Et pour se rappeler de ce que fait un bout de code, c’est quand même mieux de commenter un peu :D

    • Julio Potier · février 21, 2013
      Oui bien sûr on peut en ajouter plusieurs, mais le fait d’avoir 100 fichiers ou 1 avec 100 astuces, c’est la même perf.
      Commenter oui, mais si vous remplissez bien la description ça devrait suffire non ? ;)
      Merci à toi
  5. Ouistiti · février 21, 2013
    Madame Michu vient d’apprendre « Comment créer un mu-plugin? » (plaisanterie à part :)). Merci pour cette astuce que je vais tester.
    • Julio Potier · février 21, 2013
      Mais tout à fait ! Pas besoin d’avoir un profil de codeur pour créer un plugin à base d’astuce. Seule la peur vous empêche d’avancer. Je n’imagine pas quelqu’un vendre des sites WordPress ne pas savoir faire ça. Vraiment, le profil demandé pour cette action est « savoir envoyer un fichier en sFTP sur son hébergement » et les tutos là dessus ne manquent pas non plus, rien de méchant.

      Merci à toi !

    • Ouistiti · février 21, 2013
      J’ai déjà travaillé avec des dev où tout était bien compartimenté (chacun sa tâche, ce n’était pas la mienne) et sans CMS Open Source. Jusqu’à maintenant les bouts de code trouvés sur le web ou forum, d’office je les intégrais dans le fichier functions.php. Je n’en suis pas au stade de vendre du WordPress ;) mais au stade expérimental.

      Merci pour votre tutoriel, réponse, et j’apprécie votre sens de l’humour!

      Daniel Roch Merci pour le complément d’information.
      Aurélien Denis Je passe régulièrement sur votre blog.

  6. Aurélien Denis · février 21, 2013
    J’aime bien le ton décalé :)

    Tu remarqueras que dans mes tutos, j’indique toujours qu’on peut soit utiliser le functions.php ou un plugin de fonctions globales pour ne pas dépendre du thème…

    • Julio Potier · février 21, 2013
      C’est vrai mais toi t’es un mec bien :D
  7. Daniel Roch · février 21, 2013
    Le seul gros défaut, c’est qu’un plugin va se charger plus tôt par rapport à un thème. Et pour certaines fonctions, c’est parfois beaucoup trop tôt. Par exemple, un wp_get_current_user vous renverra une belle erreur si vous ne l’ajoutez pas à la bonne action, tandis que dans un thème le problème sera moins gênant (dans un thème, pluggable.php est chargé avant alors qu’avec un plugin non).

    Donc c’est une excellent idée, mais il faut tout tester avant de faire son copier/coller depuis le functions.php vers son plugin.

    • Julio Potier · février 21, 2013
      Exact, c’est ça que je cherche à dire ici « Si vous comptiez ajouter du code “directement” dans le fichier et non via un hook, »
      Donc en passant par des hooks ça va bien.
      Pour le moment je n’ai jamais eu de soucis avec les mu et je ne fais que ça moi ^^
      merci
  8. Brotip · février 21, 2013
    j’avais pour habitude de tout foutre dans le functions.php, et ainsi je te remercie de ces alternatives plus jolies :)
  9. Gamme-Peugeot.fr · février 21, 2013
    Moi qui blindais mes fichier de function j’ai l’impression que je vais devoir revoir ma copie sur certaine optimisation ..

    Tank’s :)

  10. Amaury · février 21, 2013
    L’arbre de décision est excellent :) Je l’ajouterai à mes PPT ^^

    Si seulement tu pouvais être lu par les créateurs de thèmes premium qui embarque des frameworks de 150 fichiers ^^

    Les dérives sur le fichier functions.php sont assez dramatique, j’audite régulièrement des sites avec des fichiers contenant 3 à 4000 lignes… Dramatique pour la maintenabilité.

    • Julio Potier · février 21, 2013
      héhé merci à toi, tu peux le reprendre j’ai mis mon url dessus, c’est le prix ;)
      Mon plus long fichier découvert est 1174 lignes (119 sidebars …)
      « Dramatique pour la maintenabilité. » !
  11. Bruno · février 21, 2013
    Bonjour,

    Cela m’a l’air intéressant et je pense que c’est plus rassurant pour les néophytes, mais je me pose tout-de-même la question de la vitesse de chargement des pages, car ne dit-on pas souvent que plus on installe de plugins, plus les pages sont longues à charger?

    • Julio Potier · février 21, 2013
      Il faut installer ce dont on a besoin. Après, le temps de chargement va dépendre de ce que vous ajoutez et de la qualité du code.
      Si vous ajoutez un plugin de E-ommerce, alors oui, le temps de chargement sera plus lent, mais c’est aussi obligatoire si c’est un site de E-commerce !
      Aussi, si vous installez 50 plugins + 50 astuces bien codés OU 10 plugins mal codés, c’est bien les 10 mal codés qui vont vous poser problème.
      Mais je reviens à ma première phrase, n’installez QUE ce dont vous avez vraiment besoin, exit les gadgets qui trainent partout ;)
  12. Nicolas · février 21, 2013
    Merci pour cet article, je vais devoir créer mon propre plugin (stress, peur, boule au ventre), cet article va bien m’aider.

    Je n’avais pas pensé à la problématique du changement de thème, merci me l’avoir souligné.

    • Julio Potier · février 21, 2013
      De rien, il est là pour ça. Si tu as besoin d’aide pour créer des plugins, tu peux me contacter ;)
    • Nicolas · février 21, 2013
      ok merci c’est super sympa. Je pense attaquer la création ce week :)
  13. Location Peniscola · février 21, 2013
    J’aime beaucoup la simplicité et l’humour de ces organigrammes.
    Après pour le reste, ça devient trop compliqué à mettre en œuvre.
  14. Renaud · février 21, 2013
    C’est quand même un peu chaud à mettre en place mais toujours moins que sur Drupal ou la ça tourne à l’enfer. Faut que je repasse sur WordPress, snif.
  15. chatenaisien · février 21, 2013
    JULIO ?

    MEEEERCI !!!!

    Je vais faire des tests en local, marre de casser mon blog et remettre d’aplomd a chaque fois. Sinon Merci ovh de m’obliger à bidouiller pour faire tourner mon site de manière quasi pas fluide…

    Thks encore !

  16. Olivier D · février 21, 2013
    Tiens tiens, je vais l’utiliser dans le thème que je suis en train de faire. Plus de fonction avec un plugin ;)
  17. Extradvdrip · février 21, 2013
    Bonsoir
    L’idée de créer des petits plugins perso pour les astuces me plaît bien ! J’ai toujours un fichier functions.php
    merci pour tous
    bonne chance
  18. Jean Bon · février 21, 2013
    Bonsoir
    J’aime beaucoup la simplicité et l’humour de ces organigrammes.
    Après pour le reste, ça devient trop compliqué à mettre en œuvre.
    merci pour l’auteur
    bonne chance
  19. jean-claude Martin · février 21, 2013
    Bonjour,
    Toucher au fichier functionS.php est toujours délicat et occasionne parfois des erreurs.J’ai appliqué la modification et tout semble fonctionner parfaitement.Merci pour le partage
    cordialement
  20. mik · février 21, 2013
    Snif malheuresement cela ne marche pas ni en mu-plugins, ni dans le fichier fonctions.php avec WP 3.6.1

    Cela serait bien efficace pour les personnes non-habituées

  21. Nico @QuarkSEO · février 21, 2013
    Belle découverte ce mu-plugins !
    Allez je me penche dessus pour convertir mes bouts de code de template dans le bon format.

    ps : Ton baw.li/tips sur le schéma redirige vers l’accueil, normal ? Ca aurai été plus logique vers cette article.

    • Julio Potier · février 21, 2013
      merci ;)
      baw.li, je l’ai cassé et tous mes liens sont alors sur la home maintenant !
  22. Bernard G. · février 21, 2013
    Merci pour cet excellent article et ces explications.
    C’est assez cool en effet de pouvoir diminuer la taille de mon fichier de fonctions.
    Et si j’ai bien compris, en mu-plugin, ces plugins ne sont jamais désactivés par inadvertance.
    Je vais mettre cela en place.

    Merci Julio.

  23. Antony · février 21, 2013
    Super article, merci de nous faire partager tout ca sur ton site.
  24. Ouistiti.net · février 21, 2013
    J’avais complètement zappé ce sujet. En passant par le site WPformation, j’atterris à nouveau chez vous. Résultat, j’ai créé 7 mu-plugin sur 8. Le petit dernier ne veut pas, trop capricieux …

    Merci à vous pour l’astuce.

  25. madvic · février 21, 2013
    Petite info supplémentaire.
    La constante pour accéder au mu-plugins est : WPMU_PLUGIN_URL et WPMU_PLUGIN_DIR
  26. Astuces Wordpress · février 21, 2013
    Je ne connaissais pas du tout cette possibilité. C’est vrai que dès fois on est un peu perdu dans le functions.php quand on a rajouté une multitude de lignes de code. Merci pour l’astuce.
  27. Stéphane Thirion · février 21, 2013
    Merci pour ces explications, bon travail