Pourquoi créer son propre plugin plutôt qu’utiliser le functions.php
La tentation est grande d’ajouter des fonctionnalités personnalisées directement dans le fichier functions.php du thème. C’est pratique, rapide, et c’est précisément pour ça que c’est une mauvaise pratique. Le functions.php est lié au thème — si le thème change, toutes les fonctionnalités disparaissent. Il mélange la présentation et la logique fonctionnelle, deux responsabilités qui n’ont rien à faire ensemble. Un plugin dédié sépare clairement les préoccupations, survit aux changements de thème, est facilement transférable d’un projet à l’autre, et peut être activé/désactivé sans impact sur la présentation. Pour tout code fonctionnel destiné à durer, le plugin est la réponse correcte.
La structure d’un plugin WordPress bien architecturé
Un plugin WordPress minimal mais bien structuré respecte une organisation de fichiers claire et prévisible. À la racine du dossier plugin, le fichier principal porte le même nom que le dossier et contient l’en-tête de plugin requis par WordPress :
/**
* Plugin Name: Mon Plugin
* Plugin URI: https://exemple.com
* Description: Description courte du plugin.
* Version: 1.0.0
* Author: Jonathan LUSY
* Text Domain: mon-plugin
* Domain Path: /languages
*/
La structure recommandée pour un plugin de taille moyenne comprend un dossier /includes pour les classes PHP, un dossier /admin pour tout ce qui concerne l’interface d’administration, un dossier /public pour le front-end, et des dossiers /css et /js dans chacun. Cette séparation admin/public facilite le chargement conditionnel des assets — les scripts admin ne se chargent pas sur le front, et vice-versa.
La classe principale du plugin : organisation orientée objet
L’approche orientée objet est la plus recommandée pour les plugins WordPress d’une certaine complexité. Elle évite les conflits de noms, facilite la maintenabilité et permet une organisation logique du code. La classe principale instancie les sous-classes, enregistre les hooks globaux et fournit les méthodes d’activation et de désactivation.
class Mon_Plugin {
private static $instance = null;
public static function get_instance() {
if ( null === self::$instance ) {
self::$instance = new self();
}
return self::$instance;
}
}
Le pattern Singleton garantit qu’une seule instance du plugin est créée, évitant les enregistrements de hooks multiples.
Sécuriser son plugin : les fondamentaux incontournables
La sécurité d’un plugin WordPress repose sur quatre piliers que tout développeur doit intégrer comme des réflexes.
Vérification des capacités
Toujours vérifier que l’utilisateur courant dispose des capacités nécessaires avant d’exécuter une action sensible. current_user_can() est votre meilleur ami : if ( ! current_user_can( 'manage_options' ) ) { wp_die( 'Accès non autorisé.' ); }
Nonces : protéger les formulaires et requêtes AJAX
Les nonces WordPress protègent contre les attaques CSRF. Générer un nonce avec wp_create_nonce() lors de l’affichage du formulaire, le valider avec wp_verify_nonce() lors du traitement. Cette étape est non négociable sur tous les formulaires d’administration et toutes les requêtes AJAX.
Sanitization et validation des données
Ne jamais faire confiance aux données en entrée. Utiliser les fonctions de sanitisation WordPress selon le contexte : sanitize_text_field() pour du texte simple, sanitize_email() pour les emails, absint() pour les entiers positifs, wp_kses_post() pour du contenu HTML autorisé. Pour les données en sortie, utiliser les fonctions d’échappement : esc_html(), esc_attr(), esc_url().
Requêtes en base de données sécurisées
Utiliser systématiquement $wpdb->prepare() pour toute requête SQL comportant des variables. L’injection SQL est l’une des failles les plus graves et les plus évitables : $wpdb->get_results( $wpdb->prepare( "SELECT * FROM {$wpdb->prefix}ma_table WHERE id = %d", $id ) );
L’Options API et la Settings API pour les réglages
WordPress fournit des APIs natives pour gérer les réglages de plugin. L’Options API (get_option, update_option, delete_option) est la solution simple pour stocker des paires clé/valeur. La Settings API permet d’enregistrer des pages de réglages dans l’administration de façon structurée et sécurisée, en gérant automatiquement la sanitisation et les nonces. Pour les plugins complexes avec de nombreux réglages, la Settings API est la voie recommandée malgré sa verbosité initiale.


