Créer un plugin WordPress personnalisé consiste à placer une fonctionnalité dans une extension autonome, puis à utiliser les hooks du CMS. Vous conservez ainsi votre code lors d’un changement de thème, avec des réglages contrôlés et un affichage adapté à votre projet.
Vous avez ajouté quelques fonctions dans un thème enfant. Puis un autre projet arrive, avec ses propres réglages, ses exceptions et ses correctifs. Progressivement, le fichier devient un tiroir dont vous préférez ne plus ouvrir le fond. Il existe une solution plus lisible : créer une petite extension dédiée.
Dans ce tutoriel, nous allons construire Sky Notice, un plugin qui affiche un encadré personnalisable. Son administration permet de modifier un titre, un message et un bouton facultatif. Ensuite, un shortcode place cet encadré exactement où vous le souhaitez. L’extension n’insère rien automatiquement et ne charge aucun JavaScript.
Les exemples ciblent PHP 8.3 ou supérieur et WordPress 6.6 ou supérieur. Vous pourrez recopier tous les fichiers présentés, puis installer votre archive ZIP depuis l’administration. Nous utiliserons les API natives : les options, la Settings API, les shortcodes et le chargement des ressources.
Plugin, MU-plugin, snippet ou functions.php : que choisir ?
Commencez par définir la responsabilité du code. Une fonctionnalité métier devrait survivre à une refonte graphique. En revanche, un ajustement propre au rendu d’un thème peut rester dans ce thème, idéalement dans un thème enfant lorsque vous personnalisez un produit tiers.
Ainsi, un filtre qui adapte une règle commerciale appartient généralement à une extension. Une modification de la structure d’un modèle PHP relève plutôt du thème. Cette distinction complète notre tutoriel pour créer un thème WordPress personnalisé sans constructeur de pages.
| Solution | Usage adapté | Point à connaître |
|---|---|---|
| Plugin personnalisé | Fonctionnalité autonome, réglages, intégrations | Activation et désactivation depuis les extensions |
| MU-plugin | Comportement que l’administration ordinaire ne doit pas désactiver | Chargement automatique ; cycle d’activation différent |
| Gestionnaire de snippets | Petite adaptation ciblée, facile à organiser | Le code dépend du gestionnaire et de sa configuration |
| functions.php | Fonctionnalités liées au thème actif | Le comportement disparaît lorsque ce thème change |
Un MU-plugin ne constitue donc pas simplement un plugin normal déplacé dans un autre dossier. WordPress ne parcourt pas automatiquement tous ses sous-dossiers et n’exécute pas les hooks d’activation habituels. Pour notre exemple administrable, une extension classique offre un point de départ plus clair.
Par ailleurs, créer un plugin ne signifie pas reconstruire une fonctionnalité mature déjà disponible. Définissez le besoin, comparez les solutions existantes, puis développez lorsque cette approche apporte un avantage concret. Ici, notre objectif reste pédagogique : comprendre une extension complète, dont chaque fichier garde un rôle identifiable.
Ce que notre extension fera réellement
Sky Notice conserve une configuration commune à l’ensemble du site. Vous pourrez changer son titre, son message, le texte du bouton et son URL. Ensuite, vous afficherez cette configuration avec le shortcode [sky_notice], dans un article ou une page.
Vous pourrez également remplacer le titre pour une occurrence précise. Le message et le bouton resteront communs. Ainsi, modifier le réglage principal mettra à jour toutes les occurrences qui l’utilisent. Cette logique diffère d’une composition Gutenberg non synchronisée, dont chaque copie peut évoluer indépendamment.
Nous accepterons uniquement du texte simple dans le message. Les retours à la ligne fonctionneront, tandis que les balises HTML seront retirées. Cette décision simplifie le formulaire, la validation et les tests. Si votre besoin exige des listes ou des images, choisissez plutôt des blocs ou définissez explicitement le HTML autorisé.
Enfin, le bouton restera facultatif. Il apparaîtra seulement lorsque son libellé et son URL seront renseignés. Une configuration sans titre ou sans message ne produira aucun encadré. Nous évitons ainsi les cartes vides et les liens sans destination.