Vous avez déjà installé une extension WordPress et pensé : « Je pourrais faire exactement ça, mais en mieux, et adapté à mes besoins » ? Ce n’est pas une intuition à ignorer. Créer un plugin WordPress est une compétence qui transforme radicalement la façon dont vous abordez les projets web. Plutôt que de dépendre d’outils tiers souvent surdimensionnés, vous prenez le contrôle total de votre environnement de développement.
Qu’est-ce qu’un plugin WordPress et à quoi sert une extension ?
Un plugin WordPress est un ensemble de fichiers PHP – et parfois CSS, JavaScript ou des fichiers de traduction – qui s’intègre au cœur de WordPress pour en étendre les fonctionnalités sans toucher à son code source natif. C’est précisément ce principe d’extensibilité qui fait la force du CMS.
Concrètement, une extension peut accomplir des missions très variées : ajouter un formulaire de contact, créer un système de réservation, générer des types de contenu personnalisés, ou connecter WordPress à un CRM. Tout ce que WordPress ne fait pas nativement, un plugin peut le faire.
Il est important de distinguer un plugin d’un thème. Le thème gère la présentation visuelle, le plugin gère la fonctionnalité. Cette frontière n’est pas toujours respectée en production et c’est souvent source de problèmes de maintenabilité. Bien séparer les deux est une règle d’or.
Pourquoi développer son propre plugin plutôt qu’utiliser une extension existante ?
La question est légitime. Le répertoire officiel WordPress.org référence plus de 60 000 plugins gratuits. Pourquoi, dans ce contexte, prendre le temps de développer le sien ? Les raisons sont souvent bien plus pragmatiques qu’il n’y paraît.
Séparer les fonctionnalités du thème pour plus de maintenabilité
C’est l’une des erreurs les plus fréquentes sur des projets hérités : des fonctionnalités métier codées directement dans le fichier functions.php du thème. Le problème ? Si vous changez de thème – ce qui arrive inévitablement – vous perdez tout ce code.
Cela vous permet de rendre votre site thème-agnostique. La fonctionnalité existe indépendamment de la couche graphique, ce qui change radicalement la durée de vie d’un projet.
Réutiliser le code sur plusieurs sites WordPress
Dès lors que vous gérez plusieurs sites WordPress – ce qui est le cas de la majorité des développeurs freelances et des agences – la logique de mutualisation du code devient évidente. Un plugin bien conçu est portable par nature. Vous le déposez dans wp-content/plugins, vous l’activez, et c’est tout.
Cela vous permet de gagner un temps considérable sur le long terme, tout en garantissant une cohérence de comportement entre vos différents projets.
Éviter les conflits lors des mises à jour
Modifier directement le cœur de WordPress ou un plugin tiers est dangereux : vos modifications seront écrasées à la prochaine mise à jour. En développant votre propre extension, vous gardez la main sur votre code, qui évolue indépendamment du reste.
Les prérequis avant de créer un plugin WordPress
Créer un plugin WordPress n’exige pas d’être un développeur senior, mais un socle technique minimal est indispensable. Voici ce qu’il vous faut avant d’écrire la moindre ligne de code.
Compétences techniques indispensables
PHP est le langage central de WordPress. Un niveau intermédiaire suffit pour créer des plugins fonctionnels, mais plus vous le maîtrisez, plus votre code sera performant et sécurisé. Au-delà du PHP, voici les compétences utiles selon le type de plugin visé :
- HTML/CSS : pour construire des interfaces d’administration ou des templates front-end
- JavaScript / jQuery : pour les interactions dynamiques, les appels AJAX, ou l’intégration avec Gutenberg via React
- SQL : pour les plugins qui interagissent directement avec la base de données via
$wpdb
La maîtrise de l’API WordPress est tout aussi importante que le PHP lui-même. Comprendre les hooks et les conventions de nommage vous évitera de réinventer la roue.
Environnement de développement local
Travailler directement sur un site en production est une erreur à ne jamais commettre. Un environnement local simule un serveur web sur votre machine, vous permettant de développer et tester en toute sécurité.
| Solution | OS compatibles | Points forts |
|---|---|---|
| MAMP | macOS, Windows | Interface simple, rapide à configurer |
| XAMPP | Windows, macOS, Linux | Très complet, grande communauté |
| WAMP | Windows uniquement | Idéal pour les environnements Windows |
| LocalWP | Tous | Expérience fluide, gestion simplifiée |
LocalWP (anciennement Local by Flywheel) est aujourd’hui l’alternative moderne la plus appréciée pour une gestion simplifiée des instances WordPress locales.
Outils recommandés
Pour l’édition de code, Visual Studio Code s’impose comme la référence dans la communauté WordPress. Gratuit, léger et extensible, il propose des extensions dédiées au PHP et à WordPress. PHPStorm est une alternative payante, très puissante pour les projets complexes.

Pour accéder aux fichiers, un client FTP comme FileZilla ou Cyberduck est utile. En environnement local, un accès direct via votre explorateur de fichiers suffit souvent.
Structure d’un plugin WordPress : comprendre l’architecture des fichiers
L’emplacement des plugins dans WordPress
Tous les plugins sont stockés dans wp-content/plugins/. Chaque plugin possède son propre sous-dossier portant un identifiant unique. WordPress scanne automatiquement ce dossier pour détecter les extensions disponibles et les présenter dans le tableau de bord.
Créer le dossier et le fichier principal
La structure minimale d’un plugin se résume à deux éléments : un dossier portant le nom de votre plugin (ex. : mon-plugin-perso/), et un fichier PHP principal du même nom (ex. : mon-plugin-perso.php).
Pour les plugins plus complexes, l’architecture s’enrichit naturellement :
mon-plugin-perso/
├── mon-plugin-perso.php ← Fichier principal
├── readme.txt ← Description et documentation
├── includes/ ← Classes et fonctions PHP
├── admin/ ← Fichiers spécifiques à l'administration
├── public/ ← Fichiers front-end
├── languages/ ← Fichiers de traduction (.po, .mo)
└── assets/
├── css/
└── js/
Cette organisation n’est pas imposée par WordPress, mais elle est fortement recommandée par la communauté pour maintenir un code lisible et évolutif.
Les informations d’en-tête obligatoires
WordPress identifie un plugin grâce à un bloc de commentaires standardisé placé en tout début du fichier PHP principal. Sans cet en-tête, WordPress ne reconnaîtra pas votre fichier.
<?php
/**
* Plugin Name: Mon Plugin Perso
* Plugin URI: https://www.monsite.fr/mon-plugin
* Description: Une courte description de ce que fait le plugin.
* Version: 1.0.0
* Author: Votre Nom
* Author URI: https://www.monsite.fr
* License: GPL-2.0+
* Text Domain: mon-plugin-perso
*/
Le champ Plugin Name est le seul véritablement obligatoire, mais il est fortement conseillé de renseigner l’ensemble des champs. Le Text Domain est quant à lui indispensable pour l’internationalisation.
Comment créer un plugin WordPress pas à pas ?
Étape 1 — créer le dossier du plugin avec un nom unique
Ouvrez wp-content/plugins/ et créez un nouveau dossier. Le nom doit être unique, en minuscules, avec des tirets comme séparateurs — pas d’espaces, pas de caractères spéciaux. Par convention, utilisez un préfixe qui vous identifie.
Par exemple : jd-compteur-vues/ est bien préférable à compteur/ ou plugin1/. Cette unicité est d’autant plus importante si vous envisagez de publier votre plugin.
Étape 2 — rédiger l’en-tête PHP et les métadonnées du plugin
Créez le fichier PHP principal, rédigez le bloc d’en-tête, puis ajoutez immédiatement une sécurité d’accès direct :
if ( ! defined( 'ABSPATH' ) ) {
exit; // Empêche l'accès direct au fichier
}
Cette ligne empêche quiconque d’exécuter le fichier PHP directement depuis l’URL du navigateur. Simple, mais essentiel.
Étape 3 — comprendre et utiliser les hooks : actions et filtres WordPress
Les hooks sont le mécanisme central de WordPress. Ils permettent à votre plugin de s’insérer dans le cycle d’exécution du CMS sans modifier son code source. Il en existe deux types.
Les actions (add_action) exécutent une fonction à un moment précis du cycle WordPress. Par exemple, injecter un script au chargement d’une page :
add_action( 'wp_enqueue_scripts', 'jd_charger_scripts' );
function jd_charger_scripts() {
wp_enqueue_script( 'mon-script', plugin_dir_url( __FILE__ ) . 'assets/js/script.js', array(), '1.0.0', true );
}
Les filtres (add_filter) interceptent une donnée pour la modifier avant qu’elle soit utilisée. Par exemple, modifier le titre d’un article :
add_filter( 'the_title', 'jd_modifier_titre' );
function jd_modifier_titre( $title ) {
return $title . ' — Mon Site';
}
Cela vous permet de modifier le comportement de WordPress sans toucher à son code source. Maîtriser les hooks, c’est maîtriser WordPress.
Étape 4 — écrire les premières fonctions de votre extension
Une fois les hooks compris, écrivez vos premières fonctions. En pratique, chaque fonction doit accomplir une seule chose, et son nom doit être préfixé pour éviter les conflits. Voici un exemple concret : un plugin qui affiche un message de bienvenue en haut de tous les articles.
add_filter( 'the_content', 'jd_message_bienvenue' );
function jd_message_bienvenue( $content ) {
if ( is_single() ) {
$message = '<p class="jd-bienvenue">Merci de lire cet article !</p>';
return $message . $content;
}
return $content;
}
Étape 5 — ajouter une page d’administration dans le tableau de bord
La plupart des plugins nécessitent une interface de configuration accessible depuis le tableau de bord. On utilise pour cela le hook admin_menu :
add_action( 'admin_menu', 'jd_ajouter_menu_admin' );
function jd_ajouter_menu_admin() {
add_options_page(
'Réglages Mon Plugin',
'Mon Plugin',
'manage_options',
'mon-plugin-perso',
'jd_afficher_page_admin'
);
}
function jd_afficher_page_admin() {
echo '<div class="wrap"><h1>Réglages de Mon Plugin</h1></div>';
}
Le paramètre manage_options restreint l’accès à cette page aux administrateurs uniquement. Adaptez-le selon les droits que vous souhaitez accorder.
Étape 6 — installer et activer le plugin depuis l’interface WordPress
Une fois votre fichier PHP créé avec son en-tête valide, rendez-vous dans Tableau de bord > Extensions > Extensions installées. Votre plugin apparaît dans la liste. Cliquez sur « Activer » — votre extension est en ligne.
Hébergement WordPress gratuit : cadeau empoisonné ou vrai bon plan ?
Si votre plugin n’apparaît pas, vérifiez que le bloc d’en-tête est correct, que le fichier PHP est bien à la racine de son dossier dans wp-content/plugins/, et qu’aucune erreur PHP ne bloque le chargement.
Fonctionnalités avancées pour enrichir votre plugin WordPress
Créer des custom post types avec votre extension
Les custom post types permettent d’ajouter de nouveaux types de contenus à WordPress, en complément des articles et pages natifs. Un site immobilier aura des « Biens », un site de recettes aura des « Recettes », un portfolio aura des « Projets ».
On les enregistre via register_post_type(), appelée sur le hook init :
add_action( 'init', 'jd_enregistrer_cpt_projet' );
function jd_enregistrer_cpt_projet() {
$args = array(
'label' => 'Projets',
'public' => true,
'supports' => array( 'title', 'editor', 'thumbnail' ),
'has_archive' => true,
'rewrite' => array( 'slug' => 'projets' ),
);
register_post_type( 'projet', $args );
}
Cela vous permet de garantir que vos contenus restent accessibles même si vous changez de thème, ce qui serait impossible si le CPT était déclaré dans le thème.
Intégrer des appels API externes dans un plugin
WordPress embarque une classe HTTP native accessible via wp_remote_get(). Elle permet de faire des requêtes vers des API externes de façon sécurisée et compatible avec tous les environnements.
$reponse = wp_remote_get( 'https://api.example.com/data', array(
'timeout' => 15,
'headers' => array(
'Authorization' => 'Bearer ' . $votre_token,
),
) );
if ( is_wp_error( $reponse ) ) {
return 'Erreur lors de la requête API';
}
$corps = wp_remote_retrieve_body( $reponse );
$donnees = json_decode( $corps, true );
Privilégiez toujours wp_remote_get() plutôt que file_get_contents() ou cURL directement : la fonction WordPress gère automatiquement les proxies, les timeouts et les certificats SSL.
Gérer la sécurité : nonces, sanitisation et validation des données
La sécurité est non négociable. Trois mécanismes sont incontournables dans tout plugin sérieux.
Les nonces protègent vos formulaires et requêtes AJAX contre les attaques CSRF. Ils confirment que la requête provient d’un utilisateur légitime.
// Générer un nonce dans le formulaire
wp_nonce_field( 'jd_action_nonce', 'jd_nonce_field' );
// Vérifier le nonce à la réception
if ( ! wp_verify_nonce( $_POST['jd_nonce_field'], 'jd_action_nonce' ) ) {
die( 'Requête non autorisée' );
}
La sanitisation nettoie les données entrantes avant de les stocker. WordPress propose des fonctions dédiées : sanitize_text_field(), sanitize_email(), wp_kses_post(), absint()… Ne faites jamais confiance aux données envoyées par l’utilisateur.
La validation vérifie que les données correspondent au format attendu avant tout traitement. Ces trois pratiques – nonces, sanitisation, validation – forment un triptyque de sécurité que tout plugin professionnel doit implémenter.
Bonnes pratiques pour développer un plugin WordPress propre et maintenable
Écrire un plugin qui fonctionne est une chose. Écrire un plugin que vous – ou quelqu’un d’autre – pourrez reprendre sans effort six mois plus tard en est une autre. Ces bonnes pratiques font toute la différence.
Écrire un code commenté, indenté et documenté
Un code non commenté est un code oublié. Annotez vos fonctions avec des blocs PHPDoc qui décrivent leur rôle, leurs paramètres et leur valeur de retour :
/**
* Affiche un encart personnalisé après le contenu des articles.
*
* @param string $content Le contenu HTML de l'article.
* @return string Le contenu modifié avec l'encart ajouté.
*/
function jd_encart_apres_contenu( $content ) {
// ...
}
L’indentation doit être cohérente sur l’ensemble du projet. Les standards WordPress recommandent l’utilisation de tabulations — suivez-les si vous envisagez de publier votre plugin.
Préfixer toutes les fonctions pour éviter les conflits de nommage
WordPress charge tous les plugins simultanément dans le même espace global PHP. Si deux plugins définissent une fonction portant le même nom, WordPress génère une erreur fatale. Pour éviter cela, préfixez systématiquement toutes vos fonctions, classes, constantes et variables globales.
Concrètement, si vos initiales sont JD et que votre plugin s’appelle « Compteur » : nommez vos éléments jd_compteur_enregistrer_vue(), JD_Compteur (pour une classe), JD_COMPTEUR_VERSION (pour une constante).
Une approche moderne encore plus robuste est d’utiliser les espaces de noms PHP (namespace) couplés à l’autoloading PSR-4, ce qui élimine complètement les risques de conflits.
Internationalisation : rendre votre plugin multilingue
Un plugin bien conçu ne code pas ses chaînes de texte en dur. Il les encapsule dans des fonctions de traduction pour permettre à des contributeurs de le traduire dans n’importe quelle langue. C’est une exigence pour soumettre votre plugin sur WordPress.org.
echo esc_html__( 'Bienvenue sur mon plugin', 'mon-plugin-perso' );
Le second paramètre correspond au Text Domain déclaré dans l’en-tête. Les fichiers de traduction (.po pour la source, .mo pour la version compilée) sont placés dans le dossier languages/ de votre plugin. L’outil Poedit est la solution la plus utilisée pour les générer et les gérer.
Les mu-plugins WordPress : créer un plugin à activation automatique
Les mu-plugins (must-use plugins) sont une catégorie particulière d’extensions. Stockés dans wp-content/mu-plugins/, ils sont chargés automatiquement par WordPress à chaque requête, sans intervention dans le tableau de bord. Impossible de les désactiver depuis l’interface d’administration.
Webflow ou Bubble ? Le match pour choisir votre futur outil web.
Cette caractéristique les rend particulièrement adaptés à certains cas d’usage :
- Des fonctionnalités critiques que vous ne voulez pas risquer de voir désactivées accidentellement
- Des configurations réseau (WordPress Multisite) à appliquer sur tous les sous-sites
- Des snippets liés à l’infrastructure (gestion des logs, personnalisations d’environnement)
En pratique, un mu-plugin est un fichier PHP unique placé directement à la racine de wp-content/mu-plugins/. Les sous-dossiers ne sont pas scannés automatiquement — si votre mu-plugin nécessite plusieurs fichiers, créez un fichier principal à la racine qui inclut les autres via require_once.

À noter : les mu-plugins n’ont pas de fonctions d’activation ou de désactivation, et ne sont pas soumis aux mises à jour automatiques. Ils sont davantage faits pour des environnements maîtrisés par des développeurs expérimentés.
Publier son plugin sur le répertoire officiel WordPress.org
Une fois votre plugin abouti et testé, vous pouvez le partager avec la communauté. La revue est effectuée manuellement par l’équipe WordPress, ce qui garantit un certain niveau de qualité, mais implique un délai de traitement de quelques semaines.
Créer le fichier readme.txt et respecter les standards de soumission
Le fichier readme.txt est aussi important que votre code. C’est lui qui alimente la page de présentation de votre plugin sur WordPress.org, et il doit respecter scrupuleusement la syntaxe définie par WordPress :
=== Mon Plugin Perso ===
Contributors: votreidentifiant
Tags: tag1, tag2, tag3
Requires at least: 5.9
Tested up to: 6.5
Stable tag: 1.0.0
License: GPLv2 or later
License URI: https://www.gnu.org/licenses/gpl-2.0.html
Courte description du plugin (moins de 150 caractères).
== Description ==
Description longue et détaillée de votre plugin.
== Installation ==
1. Uploadez le dossier dans wp-content/plugins/
2. Activez le plugin depuis le tableau de bord.
== Changelog ==
= 1.0.0 =
* Version initiale.
Le champ Tested up to doit indiquer la dernière version de WordPress avec laquelle vous avez testé votre plugin. Une valeur obsolète peut décourager les utilisateurs et générer des avertissements dans le tableau de bord.
Vérifier l’unicité du nom et de l’identifiant du plugin
Avant de soumettre, vérifiez que le slug de votre plugin n’est pas déjà pris sur WordPress.org. Deux plugins ne peuvent pas partager le même slug, c’est lui qui définit l’URL de la page du plugin et son identifiant unique dans le système de mises à jour.
Faites une recherche sur wordpress.org/plugins/votre-slug pour vérifier la disponibilité. Une fois soumis, l’identifiant ne peut plus être modifié, pensez donc aussi à sa lisibilité et à sa mémorabilité.
La soumission se fait via le formulaire sur wordpress.org/plugins/developers/add/. Après approbation, vous recevrez un accès SVN pour déposer vos fichiers et gérer les mises à jour. Bienvenue dans la communauté des développeurs de plugins WordPress.






0 commentaires