Créer un plugin de fonctions globales sous WordPress (mu-plugin)

Mis à jour le :

Un thème WordPress est composé d’un fichier functions.php regroupant des fonctions PHP propre au thème ou à WordPress.

Comment faire en sorte que certaines fonctionnalités agissent de manière globale et non de façon localisée, de manière à les conserver intactes lors d’un changement de thème ? La réponse : créer un plugin de fonctions.

Quel est l’intérêt de créer un plugin de fonctions pour WordPress ?

On a tendance à insérer de nombreuses fonctions PHP dans le fameux fichier functions.php présent dans n’importe quel thème WordPress.

Cette technique est simple à comprendre pour des utilisateurs débutants mais pour un projet professionnel, il peut être intéressant de séparer les fonctions qui ont un impact direct sur le thème de celles qui ont un impact sur le contenu.

Ainsi, il est possible de créer un rapide plugin – quelques lignes de code très simple, pour appliquer de façon automatique vos fonctions qui n’ont pas de liens avec le thème. Vous aurez ainsi la possibilité de tester différents thèmes tout en conservant les fonctionnalités de votre plugin.

Comment créer votre plugin de fonctionnalités ?

Pour ce faire, connectez-vous sur votre serveur FTP puis rendez-vous dans le dossier /wp-content/plugins/

Créez dans ce répertoire un nouveau dossier intitulé votresite-fonctions.

Le titre de ce dossier est important car il devra être réutilisé pour créer un fichier votresite-fonctions.php dans ce nouveau dossier.

Adaptez ensuite les lignes de code suivantes à votre site :

<?php
/*
Plugin Name: WordPress Channel fonctions
Description: L'ensemble des fonctions globales du site.
Version: 0.1
License: GPL
Author: Aurelien Denis
Author URI: https://wpchannel.com/
*/
?>

Fonctionnalités à insérer dans votre plugin de fonctions

Il nous faut à présent copier / coller ici dans ce fichier les fonctions PHP qui n’ont rien à faire dans un thème. Par exemple :

Fonctionnalités à conserver dans le fichier functions.php du thème

Gardez tout ce qui concerne directement le thème, autrement dit le contenant :

Bien évidemment, ces 2 listes ne sont pas exhaustives. Il faut vérifier au cas par cas par rapport à vos besoins réels.

Une fois les fonctions ajoutées, n’oubliez pas d’activer votre plugin !

Capture d'écran - Activation du plugin de fonctionnalités de WordPress Channel
Prenez soin de distinguer les fonctions dans un plugin

Activer automatiquement votre plugin de fonctionnalités

Pour aller plus loin, je vous conseille de créer un répertoire mu-plugins dans le dossier /wp-content/ et d’y placer directement votre plugin.

De cette manière, le plugin sera automatiquement activé et l’administrateur du site ne pourra pas le désactiver. Idéal pour appliquer des fonctions de masse.

Un dernier conseil consistera à créer un fichier lisez-moi.txt pour récapituler l’intégralité des fonctionnalités que vous aurez ajoutées au fil du temps.

Séparer le contenu du contenant est la base d’un site Web moderne, séparer les fonctionnalités qui impactent le contenant et le contenu est sans doute la prochaine étape. Au boulot !

Avatar de Aurélien Denis

Protégez votre site WordPress

Vos données sont précieuses,
ne prenez pas le risque de tout perdre.
Confiez-moi votre maintenance !

Ces articles devraient t’intéresser…

22 réponses
  1. Avatar de Julien
    Julien

    Bonjour, je déterre un vieille article mais celui-ci m’a bien aidé et peut-être que vous auriez une réponse à la question suit :
    Je voudrais pourvoir avec mon mu-plugin ajouter une fonction javascript que j’utilise fréquemment, c’est possible ? Comment faire, désolé cette question est peut-être naïve mis je ne sis pas développeur de formation et le peu de notion de code que je connais je l’ai appris via des articles comme le votre.

    1. Avatar de Aurélien Denis
      Aurélien Denis

      Hello, oui c’est tout à fait possible. Il faut créer une fonction qui va se hooker sur l’en-tête ou le pied de page selon les besoins.

      1. Avatar de Julien
        Julien

        Tu aurais un lien ou un p’tit tuto où je peux trouver comment apprendre à faire cela ?

        1. Avatar de Aurélien Denis
          Aurélien Denis

          Voici un exemple : https://pastebin.com/8rSjPV5h (fais une sauvegarde du fichier modifié au préalable).

          1. Avatar de Julien
            Julien

            C’est tout bête en faite 😀 je vais tester ça, merci encore pour ton aide.

  2. Avatar de wyman
    wyman

    Super idée.. j’essais de rajouter la fonction d’activer certaines fonctions seulement si ce n’est pas moi qui suis connecté, avec des bouts de :
    global $current_user;
    get_currentuserinfo();
    if( $current_user->email != ‘[email protected]’ ) {
    //les fonction pour autre que moi
    }
    Mais je ne vois pas comment l’intégrer à une fonctions

  3. Avatar de Hervé
    Hervé

    Bonsoir,
    J’ai un peu avance en fait ce n’est pas un problème avec is_admin() mais avec !is_super_admin() [j’ai essayé aussi !is_super_admin(1) ]
    Je voulais prendre en compte le cas:
    if ( is_admin() AND !is_super_admin() )

    Je n’arrive pas à l’intégrer dans le fichier fonctions sous mu-plugins

    J’ai une Fatal error: Call to undefined function wp_get_current_user() in D:_siteswwwwp-test-atoutwp-includescapabilities.php on line 1357

    Bonne soirée
    A+

    1. Avatar de devzonefr
      devzonefr

      Tu dois d’abord passer par une action :

      add_action( ‘init’, ‘admin_hooks’ );
      function admin_hooks() {
      global $current_user;
      if ( current_user_can(‘administrator’) && $current_user->ID == 1 ) {

      }
      }

  4. Avatar de Hervé
    Hervé

    Bonjour Aurélien,
    Merci pour ce tuto.
    J’essaie d’intégrer mes fonctions qui étaient dans le fichier functions.php.

    Petit souci avec les if conditionnel :
    if(is_user_logged_in())
    if ( is_admin()

    qui ne sont pas reconnues.
    Comment intégrer ces tests ?
    Merci
    A+

  5. Avatar de Arnod
    Arnod

    Salut, et merci pour cet article.

    J’ai repéré une petite erreur, le dossier /mu-plugins/ est à ajouter par défaut dans le répertoire /wp-content/ et pas /wp-content/plugins/, sinon ça ne fonctionnera pas 😉 .

    1. Avatar de Aurélien Denis
      Aurélien Denis

      C’est exact, l’erreur est tellement énorme que j’aurais du m’en apercevoir à la relecture ! Merci de ton attention !

  6. Avatar de Jeremie
    Jeremie

    Salut Aurélien,
    Merci pour ce super article.
    J’ai une question: Est il possible du coup de mettre certains autres plugins dans le répertoire « mu-plugins » que l’on a créé pour qu’ils puissent se lancer automatiquement et surtout permettre au client qu’il ne puisse pas le désactiver.
    Merci d’avance pour ta réponse.
    (Je suis fan de ton travail)

    1. Avatar de Aurélien Denis
      Aurélien Denis

      Oui c’est une idée mais je pense qu’il ne faut pas trop en abuser…

  7. Avatar de Jimmy
    Jimmy

    d’accord !
    désolé ! quand j’ai lu votre article ça m’a tout de suite rappelé cet article en anglais que j’avais lu il y a quelques temps !

    1. Avatar de Aurélien Denis
      Aurélien Denis

      Y pas de soucis ! 😎

  8. Avatar de Jimmy
    Jimmy

    c’est un truc très utile merci de le faire partager à la communauté wordpress francophone, et pour ceux qui n’ont pas peur de l’anglais vous pouvez voir l’article dont s’est inspiré l’auteur (sans le citer) ici : http://wpcandy.com/teaches/how-to-create-a-functionality-plugin.

    1. Avatar de Aurélien Denis
      Aurélien Denis

      Oui c’est un excellent site mais pour info ce n’est pas vraiment à partir de celui-ci que j’ai créé mon article mais plutôt à partir de différentes pages du codex… et de techniques apprises sur différents forums en d’autres occasions. 😉

  9. Avatar de Daniel Roch
    Daniel Roch

    J’avoue que c’est un bon moyen pour conserver toutes les options et variables globales lors du changement d’un thème.

    Par contre, je mettrais juste un bémol à cette technique. Dès lors qu’il s’agit d’un plugin, il ralentira l’admin du site, puisque des tâche en fond vérifie la présence e mises à jour du plugin sur l’extend de WordPress, et que l’intégration des options et globales est plus rapide dans le thème car le fichier functions.php y est automatiquement chargé.

    Mais au delà de ça, cela facilite le transfert et la conservation des données du thème. Libre à chacun de faire le choix qui lui semble le plus adapté.

    1. Avatar de alex
      alex

      La vérification des mises à jour ne ralentit pas l’admin du site. L’on peut dire que les tâches de fond s’exécutent sur un autre processus — WP lance une nouvelle requête http sur site.com/wp-cron.php, regarde le code de spawn_cron() si cela t’intéresse. Ces requêtes se font même s’il n’y a pas de plugins installés.

  10. Avatar de yann
    yann

    Bonjour,

    Je recherche un plugin justement qui me permettrait d’afficher l’heure de publication de mes articles soit dans le widget « post recents » soit dans le thème proprement dit.

    l’heure pendant le jour de publication, qui se transformerait en date le lendemain.

    ex :
    16h02 : La france perd…

    puis demain il passe à
    14 jan : La france perd

    si quelqu’un peut m’aider sachant que j’ai déjà formulé cette question sur le site wordpress francophone, en vain…

    Merci

  11. Avatar de thierry
    thierry

    Pas mal. On peut aussi améliorer le truc en disséquant le reste du functions.php comme évoqué ici et n’appeler ses différentes parties que lorsqu’elles sont nécessaires : http://css4design.com/wordpress-a-z-functions-php

    Je précise en passant que mu-plugins n’a rien à voir avec feu WordPress Mu mais must use plugins.

    Merci et à bientôt.
    Thierrry

    1. Avatar de Aurélien Denis
      Aurélien Denis

      Oui très bonne remarque !

      J’en profite pour rajouter que le dossier mu-plugins est un dossier spécial qui active obligatoirement un plugin sur WordPress. On ne peut le désactiver d’où le nom de must-use.