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 :
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 :
- Les custom post types ou type de contenu personnalisé ;
- Les custom taxonomies ou taxonomies personnalisées ;
- L’ajout de jQuery via Google ;
- Les hacks pour personnaliser l’administration de WordPress ;
Fonctionnalités à conserver dans le fichier functions.php du thème
Gardez tout ce qui concerne directement le thème, autrement dit le contenant :
- Les menus personnalisés ;
- Les sidebars widgetisées ;
- Certains scripts jQuery relatifs à votre thème ;
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 !
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 !
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.
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.
Tu aurais un lien ou un p’tit tuto où je peux trouver comment apprendre à faire cela ?
Voici un exemple : https://pastebin.com/8rSjPV5h (fais une sauvegarde du fichier modifié au préalable).
C’est tout bête en faite 😀 je vais tester ça, merci encore pour ton aide.
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
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+
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 ) {
…
}
}
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+
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 😉 .
C’est exact, l’erreur est tellement énorme que j’aurais du m’en apercevoir à la relecture ! Merci de ton attention !
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)
Oui c’est une idée mais je pense qu’il ne faut pas trop en abuser…
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 !
Y pas de soucis ! 😎
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.
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. 😉
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é.
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.
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
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
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.