Un plugin WordPress, pourquoi et comment
Les plugins étendent WordPress. Pour une PME, plutôt que d’accumuler du code custom dans le thème ou des fichiers épars, créer un plugin dédié structure les développements, facilite la maintenance, et peut être réutilisé sur plusieurs sites. Ce tutoriel guide la création d’un plugin basique pour comprendre les concepts, avec une approche pragmatique accessible aux développeurs qui débutent.
Les concepts fondamentaux
Un plugin est un dossier contenant au moins un fichier PHP avec un en-tête spécial. WordPress détecte automatiquement les plugins dans wp-content/plugins/. Une fois activé, le code du plugin s’exécute aux points appropriés du cycle WordPress.
L’interaction avec WordPress se fait via hooks : actions (faire quelque chose à un moment précis) et filters (modifier une valeur). Ces hooks sont la clé de l’extension WordPress.
Créer la structure
Dans wp-content/plugins/, créez un dossier mon-plugin/. À l’intérieur, un fichier mon-plugin.php avec l’en-tête :
<?php /* Plugin Name: Mon Plugin Description: Description de mon plugin Version: 1.0.0 Author: Votre Nom License: GPL v2 or later */
Cet en-tête suffit pour que WordPress reconnaisse le plugin. Dans l’administration WordPress, Extensions > Extensions installées : votre plugin apparaît, prêt à être activé.
Votre premier hook
Ajoutons une fonctionnalité. Modifier le footer pour ajouter une mention. Dans mon-plugin.php :
function mon_plugin_ajouter_footer() {
echo '<div class="mon-footer-custom">Propulsé par mon plugin</div>';
}
add_action('wp_footer', 'mon_plugin_ajouter_footer');
Le hook wp_footer s’exécute dans le footer des pages publiques. Notre fonction y affiche du texte. Active le plugin et visite le site : le texte apparaît.
Les hooks action et filter
Actions : faire quelque chose. « Envoyer un email quand un nouveau post est publié ». add_action(‘publish_post’, ‘ma_fonction’);.
Filters : modifier une valeur. « Ajouter du texte à la fin de chaque article ». add_filter(‘the_content’, ‘ma_fonction’);. Dans ma_fonction, recevoir le contenu, le modifier, le retourner.
La documentation WordPress liste des centaines de hooks. Chercher un hook adapté à votre besoin avant de réinventer.
Ajouter un shortcode
Les shortcodes insèrent du contenu dynamique dans les articles et pages. [mon-shortcode] peut afficher une date, un formulaire, du contenu dynamique.
function mon_shortcode_date($atts) {
return 'Nous sommes le ' . date('d/m/Y');
}
add_shortcode('date-jour', 'mon_shortcode_date');
Dans une page, [date-jour] affichera la date actuelle. Les attributs passés (shortcode [date-jour format= »Y »]) se récupèrent via $atts.
Ajouter un widget
Les widgets s’ajoutent dans les zones de widgets du thème. Création plus verbose, via une classe qui étend WP_Widget. Documentation officielle détaille la structure.
Pour un besoin simple, un shortcode peut suffire et être plus flexible.
Ajouter une page d’administration
Pour configurer le plugin depuis l’admin. add_menu_page ou add_options_page créent des pages dans le menu.
function mon_plugin_menu() {
add_menu_page(
'Mon Plugin', // titre de la page
'Mon Plugin', // libellé menu
'manage_options', // capacité requise
'mon-plugin', // slug
'mon_plugin_page' // fonction qui affiche
);
}
add_action('admin_menu', 'mon_plugin_menu');
function mon_plugin_page() {
echo '<h1>Ma page d\'administration</h1>';
}
Stocker des options
Pour persister des configurations. Les fonctions WordPress add_option, get_option, update_option, delete_option gèrent.
update_option('mon_plugin_param', 'valeur');
$valeur = get_option('mon_plugin_param', 'defaut');
Stocker de manière organisée : un seul option array plutôt que plusieurs options individuelles. Facilite la gestion et économise les requêtes base de données.
Créer un formulaire de configuration
Une page d’administration avec formulaire pour configurer le plugin. L’API Settings de WordPress standardise cette création. register_setting, add_settings_section, add_settings_field définissent la structure. Le formulaire s’affiche et se traite automatiquement.
Les types de publication personnalisés
Pour ajouter un type de contenu (produits, événements, témoignages), les Custom Post Types. register_post_type crée le type.
function mon_plugin_cpt() {
register_post_type('evenement', array(
'labels' => array(
'name' => 'Événements',
'singular_name' => 'Événement'
),
'public' => true,
'supports' => array('title', 'editor', 'thumbnail')
));
}
add_action('init', 'mon_plugin_cpt');
Un nouveau type apparaît dans l’admin, avec son propre éditeur.
Les taxonomies personnalisées
Pour organiser les contenus custom. Catégories et tags dédiés via register_taxonomy. Permet de structurer sans se mélanger aux catégories du blog.
La base de données
Pour les données complexes qui ne rentrent pas dans les CPT, créer des tables custom est possible. La classe wpdb interagit avec la base. Usage limité aux cas où les CPT ne suffisent vraiment pas ; souvent, un CPT avec meta fields couvre les besoins.
Les meta fields
Associer des données supplémentaires à un post. add_post_meta, get_post_meta, update_post_meta. Advanced Custom Fields (plugin) facilite grandement la gestion avec interface graphique.
Les scripts et styles
Charger du CSS et JavaScript. wp_enqueue_script et wp_enqueue_style sont les fonctions recommandées. Chargement conditionnel : enqueue uniquement sur les pages qui en ont besoin pour éviter d’alourdir inutilement.
function mon_plugin_scripts() {
wp_enqueue_style('mon-plugin-css', plugin_dir_url(__FILE__) . 'style.css');
wp_enqueue_script('mon-plugin-js', plugin_dir_url(__FILE__) . 'script.js');
}
add_action('wp_enqueue_scripts', 'mon_plugin_scripts');
La sécurité
Préoccupations essentielles. Validation et sanitation des entrées utilisateur (sanitize_text_field, esc_html, etc.). Nonces pour les formulaires et actions sensibles (wp_create_nonce, wp_verify_nonce). Vérification des capacités utilisateur (current_user_can). Requêtes paramétrées pour la base ($wpdb->prepare).
Un plugin mal sécurisé peut être une porte d’entrée pour les attaquants. La sécurité dès la conception.
Les traductions
Pour un plugin utilisé dans plusieurs langues. Chaînes traduisibles avec __() et _e(). Fichier .pot généré avec wp i18n make-pot (WP-CLI). Traductions dans .po/.mo dans un dossier languages/.
Tester le plugin
Environnements. Développement local (Local by Flywheel, XAMPP, DevKinsta). Staging en ligne pour tester dans des conditions proches de la production. Tests unitaires avec PHPUnit pour les plugins matures.
Activer et désactiver le plugin régulièrement pour vérifier que rien ne casse l’administration ou le frontend.
La structure du plugin avancée
Un plugin qui grandit doit être structuré. Fichier principal court qui déclare et initialise. Classes dans des fichiers séparés. Namespaces PHP pour éviter les conflits. Autoload avec Composer. Séparation clair des responsabilités (admin, public, API, etc.).
La distribution
Partager son plugin. Utilisation privée : copier sur d’autres sites. Distribution via le WordPress.org plugin directory : soumission pour review, hébergement gratuit, visibilité. Distribution commerciale : votre propre site, plateformes comme CodeCanyon.
La distribution publique demande qualité du code, documentation, support.
Les bonnes pratiques
Conformité aux standards de codage WordPress. Préfixer toutes les fonctions et variables globales pour éviter les conflits. Code documenté. Respect de la vie privée (pas de télémétrie sans consentement). Compatibilité avec les versions récentes de WordPress et PHP.
Quand créer un plugin versus un thème
Règle importante : les fonctionnalités (formulaires, shortcodes, CPT) doivent être dans un plugin, pas dans le thème. Si on change de thème, les fonctionnalités doivent persister. Le thème gère la présentation ; le plugin gère la logique métier.
Apprendre en pratiquant
Codex WordPress (developer.wordpress.org) : documentation officielle exhaustive. Code source d’autres plugins : regarder comment ils font. Communauté WordPress : forums, groupes Facebook, meetups.
Conclusion : compétence utile
Savoir créer des plugins ouvre des possibilités pour toute PME qui utilise WordPress. Plutôt que d’accumuler des hacks dans le thème ou d’acheter mille plugins commerciaux, un plugin custom pour vos besoins spécifiques structure le développement. Démarrez avec un plugin simple répondant à un besoin concret : une fonction répétitive, un shortcode utile, une intégration spécifique. La prise en main est rapide ; la maîtrise se construit avec l’expérience.