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

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 ! 

Crédits photo : Sean MacEntee

19 commentaires

    1. Aurélien Denis auteur de l’article

      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.

  1. 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

  2. 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. 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.

    1. Aurélien Denis auteur de l’article

      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.

  3. 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 !

  4. 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)

  5. 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 .

  6. 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+

  7. 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. 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 ) {

      }
      }

  8. 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 != ‘contact@d1-clic.com’ ) {
    //les fonction pour autre que moi
    }
    Mais je ne vois pas comment l’intégrer à une fonctions

Laisser un commentaire