Créer un plugin wordpress est la façon la plus propre d'ajouter des fonctionnalités à WordPress sans modifier le core. Toute personnalisation dans un plugin survit aux mises à jour du CMS, contrairement aux modifications directes dans les fichiers WordPress. Voici comment développer votre premier plugin professionnel.
Structure d'un plugin WordPress
La structure minimale d'un plugin wordpress se résume à un fichier PHP avec un en-tête spécifique :
wp-content/plugins/mon-plugin/
├── mon-plugin.php # Fichier principal
├── includes/
│ ├── class-mon-plugin.php
│ └── functions.php
├── admin/
│ └── class-mon-plugin-admin.php
└── assets/
├── css/
└── js/
<?php
/**
* Plugin Name: Mon Plugin
* Plugin URI: https://monsite.fr/plugin
* Description: Description courte du plugin
* Version: 1.0.0
* Author: Benjamin Schweitzer
* License: GPL v2 or later
*/
// Sécurité : empêcher l'accès direct
defined('ABSPATH') || exit;
// Constantes
define('MON_PLUGIN_VERSION', '1.0.0');
define('MON_PLUGIN_DIR', plugin_dir_path(__FILE__));
define('MON_PLUGIN_URL', plugin_dir_url(__FILE__));
// Initialisation
add_action('plugins_loaded', function() {
require MON_PLUGIN_DIR . 'includes/class-mon-plugin.php';
new MonPlugin();
});
Actions et Filtres : le coeur de WordPress
Le système de hooks wordpress permet d'exécuter du code à des moments précis (actions) ou de modifier des données (filtres) :
class MonPlugin {
public function __construct() {
// Actions
add_action('wp_enqueue_scripts', [$this, 'loadAssets']);
add_action('save_post', [$this, 'onPostSave'], 10, 3);
add_action('init', [$this, 'registerPostType']);
// Filtres
add_filter('the_content', [$this, 'processContent']);
add_filter('wp_title', [$this, 'customTitle'], 10, 2);
}
public function loadAssets(): void {
wp_enqueue_style('mon-plugin', MON_PLUGIN_URL . 'assets/css/plugin.css', [], MON_PLUGIN_VERSION);
wp_enqueue_script('mon-plugin', MON_PLUGIN_URL . 'assets/js/plugin.js', ['jquery'], MON_PLUGIN_VERSION, true);
wp_localize_script('mon-plugin', 'monPlugin', ['ajaxUrl' => admin_url('admin-ajax.php')]);
}
}
Shortcodes
Les shortcodes permettent aux éditeurs d'insérer des fonctionnalités dans les articles :
add_shortcode('contact_form', function(array $atts): string {
$atts = shortcode_atts(['titre' => 'Contactez-nous', 'email' => ''], $atts);
ob_start();
include MON_PLUGIN_DIR . 'templates/contact-form.php';
return ob_get_clean();
});
// Utilisation dans WordPress : [contact_form titre="Devis" email="contact@monsite.fr"]
Page d'administration
add_action('admin_menu', function() {
add_options_page('Mon Plugin', 'Mon Plugin', 'manage_options', 'mon-plugin', 'renderAdminPage');
});
function renderAdminPage(): void {
if (!current_user_can('manage_options')) wp_die('Accès refusé');
if (isset($_POST['mon_plugin_nonce']) && wp_verify_nonce($_POST['mon_plugin_nonce'], 'mon_plugin_save')) {
update_option('mon_plugin_option', sanitize_text_field($_POST['mon_option']));
echo '<div class="notice notice-success"><p>Paramètres sauvegardés.</p></div>';
}
$value = get_option('mon_plugin_option', '');
echo '<form method="post"><input type="hidden" name="mon_plugin_nonce" value="' . wp_create_nonce('mon_plugin_save') . '">';
echo '<input name="mon_option" value="' . esc_attr($value) . '"></form>';
}
Sécurité dans les plugins WordPress
Règles fondamentales pour un plugin wordpress sécurisé : vérifiez toujours currentusercan() avant toute action admin, utilisez wpverifynonce() pour chaque formulaire, sanitisez toutes les entrées (sanitizetextfield(), absint(), etc.), échappez toutes les sorties (eschtml(), escattr(), escurl()).
Le Manuel du développeur WordPress est la référence officielle avec des exemples pour chaque fonctionnalité du plugin API.
Conclusion
Développer un plugin wordpress permet d'étendre WordPress proprement sans modifier le core. La maîtrise des hooks (actions et filtres), des shortcodes et des pages d'administration vous donne les outils pour créer n'importe quelle fonctionnalité. Cette compétence est très recherchée par les clients WordPress qui veulent des solutions sur-mesure.
Créer des plugins WordPress robustes demande de maîtriser les hooks (actions et filtres) comme colonne vertébrale de l'extensibilité, les nonces pour la sécurité des formulaires, et les capabilities pour le contrôle d'accès. Suivez les coding standards WordPress pour garantir la compatibilité. Pour les plugins distribués, soumettez sur le repository WordPress.org avec un readme.txt complet. Automatisez les tests avec PHPUnit et WPMock pour simuler les fonctions WordPress. Le Gutenberg Block API est incontournable pour les plugins ajoutant des composants éditeur. Consultez le WordPress Plugin Handbook pour les bonnes pratiques officielles et les standards de qualité attendus par la communauté des développeurs WordPress.
Distribution et maintenance
Un plugin WordPress bien maintenu inclut un fichier readme.txt au format standard WordPress.org, un changelog détaillé pour chaque version, et une compatibilité testée avec les versions récentes de WordPress et PHP. Utilisez un pipeline GitHub Actions pour exécuter les tests PHPUnit, vérifier les coding standards avec PHPCS, et déployer automatiquement sur WordPress.org via SVN à chaque release taguée.