Découvrez le développement de plugins WordPress, du niveau débutant au niveau expert : créez votre première extension fonctionnelle à partir de zéro.

Lecture en 3 minutes
2026-03-26
2026-06-03
2,659
Je reçois une commission lorsque vous achetez via les liens ci‑dessous, sans frais supplémentaires pour vous.

Découvrez le développement de plugins WordPress, du niveau débutant au niveau expert : créez votre première extension fonctionnelle à partir de zéro.

La structure de base et l’organisation des fichiers des plugins WordPress

Un plugin WordPress standard se compose généralement d’un fichier principal. Le nom de ce fichier principal est très important et correspond habituellement au nom du dossier contenant le plugin. Par exemple, pour un plugin nommé “ my-awesome-plugin ”, son fichier principal peut s’appeler…my-awesome-plugin.phpDans ce fichier, les commentaires situés en tête du plugin sont essentiels car ils fournissent au système WordPress des informations de base sur le plugin.

/**
 * Plugin Name:      我的第一个插件
 * Plugin URI:       
 * Description:      这是一个用于演示的WordPress插件。
 * Version:          1.0.0
 * Author:           你的名字
 * License:          GPL v2 or later
 * Text Domain:      my-first-plugin
 */

Il est conseillé de nommer le répertoire des plugins de manière unique afin d’éviter tout conflit avec les plugins existants, et de le placer dans un emplacement approprié./wp-content/plugins/Dans le répertoire principal, en plus du fichier PHP principal, on peut trouver des dossiers tels que `assets` pour stocker le JavaScript et le CSS, le dossier `languages` pour l’internationalisation, et le dossier `templates` pour les modèles. Une structure de fichiers bien organisée est essentielle pour une meilleure gestion du projet.includes/Utilisé pour les classes et fonctions essentielles.admin/Destiné à la logique backend.public/Utilisé pour la logique frontale, cela permet d’améliorer considérablement la maintenance des plugins.

Lectures recommandées Guide ultime pour le développement de plugins WordPress : Créer votre premier plugin personnalisé à partir de zéro

Implémentation de la fonctionnalité principale du plugin

La force des plugins WordPress réside dans leur système flexible de crochets d’action (Action Hooks) et de filtres (Filter Hooks). Les crochets d’action te permettent d’exécuter du code personnalisé à des moments précis, par exemple après la publication d’un article ou lors du chargement du menu de gestion. Les crochets de filtres, quant à eux, te permettent de modifier les données transmises au cours du processus.

Hébergement WordPress par UltraHost
Garantie de remboursement dans les 30 jours, bande passante illimitée et base de données, protection gratuite contre les attaques DDoS. Avantage de 501 TP4T pour les achats sur 3 ans.

Un scénario courant consiste à ajouter automatiquement du texte à la fin du contenu d’un article. Cela peut être réalisé en utilisant des techniques de programmation ou des outils spéciaux conçus pour ce but.the_contentCela peut être réalisé à l’aide de filtres. Dans le fichier principal du plugin, vous pouvez définir une fonction et l’utiliser pour effectuer les opérations nécessaires.add_filterLa fonction l’installe sur le filtre.

function myplugin_add_footer_text( $content ) {
    if ( is_single() ) {
        $custom_text = '<p><em>Les informations de fin de cet article ont été générées automatiquement par mon plugin.</em></p>';
        $content .= $custom_text;
    }
    return $content;
}
add_filter( 'the_content', 'myplugin_add_footer_text' );

Une autre fonctionnalité clé est la création de pages de gestion. WordPress offre de nombreuses fonctions pour ajouter des éléments de menu et des pages en arrière-plan. Vous pouvez les utiliser pour mettre en place des fonctionnalités personnalisées dans votre site.add_menu_page()Ouadd_submenu_page()Une fonction est utilisée pour définir une page. Ce processus comprend généralement deux étapes : premièrement, il faut enregistrer les éléments du menu, et ensuite définir la fonction de rappel (callback) correspondante à cette page de menu afin d'afficher le contenu HTML.

function myplugin_add_admin_page() {
    add_menu_page(
        '我的插件设置', // 页面标题
        '我的插件',     // 菜单标题
        'manage_options', // 权限
        'myplugin-settings', // 菜单别名
        'myplugin_admin_page_html', // 回调函数
        'dashicons-admin-generic', // 图标
        20 // 位置
    );
}
add_action( 'admin_menu', 'myplugin_add_admin_page' );

function myplugin_admin_page_html() {
    // 检查用户权限
    if ( !current_user_can( 'manage_options' ) ) {
        return;
    }
    ?&gt;
    <div class="wrap">
        <h1></h1>
        <form action="/fr/options.php/" method="post" data-trp-original-action="options.php">
            <?php 
            // 输出设置字段
            settings_fields( 'myplugin_options' );
            do_settings_sections( 'myplugin-settings' );
            submit_button();
            ?>
        <input type="hidden" name="trp-form-language" value="fr"/></form>
    </div>
    &lt;?php
}

Configuration des plugins et gestion des options

Afin de rendre les plugins flexibles et facilement configurables, la création d’une page de paramétrage est une pratique standard. WordPress propose une API de configuration systématisée, permettant d’enregistrer, de sauvegarder et de vérifier les paramètres de manière sécurisée.

Tout d’abord, vous devez utiliser…register_setting()Une fonction est utilisée pour enregistrer un ensemble de paramètres (ou de réglages). Ensuite, ces paramètres sont appliqués (ou utilisés) dans le système.add_settings_section()Ajoutez un bloc de paramètres de configuration et utilisez-le.add_settings_field()Ajoutez les champs de configuration spécifiques dans cette section. Ces opérations se font généralement…admin_initC'est fait, le crochet est terminé.

Lectures recommandées Analyse du développement de plugins pour WordPress : Guide complet pour créer des modules de fonctionnalités personnalisées à partir de zéro

function myplugin_settings_init() {
    // 注册一个新设置
    register_setting( 'myplugin_options', 'myplugin_settings', 'myplugin_sanitize' );

    // 添加一个设置区块
    add_settings_section(
        'myplugin_section_general',
        '通用设置',
        'myplugin_section_general_cb',
        'myplugin-settings'
    );

    // 添加一个文本字段
    add_settings_field(
        'myplugin_field_footer_text',
        '自定义尾部文本',
        'myplugin_field_footer_text_cb',
        'myplugin-settings',
        'myplugin_section_general',
        [ 'label_for' => 'myplugin_field_footer_text' ]
    );
}
add_action( 'admin_init', 'myplugin_settings_init' );

// 字段渲染回调函数
function myplugin_field_footer_text_cb() {
    $options = get_option( 'myplugin_settings' );
    ?>
    <input type="text" id="myplugin_field_footer_text" name="myplugin_settings[footer_text]" value="<?php echo esc_attr( $options['footer_text'] ?? '' ); ?>" class="regular-text">
    <?php
}

// 数据清理回调函数
function myplugin_sanitize( $input ) {
    $sanitized = [];
    if ( isset( $input['footer_text'] ) ) {
        $sanitized['footer_text'] = sanitize_text_field( $input['footer_text'] );
    }
    return $sanitized;
}

Sur le front-end, vous pouvez utiliser les techniques suivantes :get_option('myplugin_settings')Obtenez l’arrêté des options enregistrées, et utilisez ces valeurs dans la logique de votre fonction.

La sécurité des plugins et les meilleures pratiques.

Développer un plugin à distribuer publiquement ou à utiliser dans un environnement de production, où la sécurité est un facteur primordial. Tous les données provenant des utilisateurs ou de sources non fiables doivent être vérifiées, nettoyées et échappées (c’est-à-dire que leurs caractères dangereux doivent être remplacés par des caractères inoffensifs).

La validation consiste à vérifier, avant le traitement des données, si elles respectent le format attendu. Par exemple, on peut utiliser des outils spécifiques pour s’assurer que les informations fournies sont bien structurées et conformes aux normes établies.filter_var()Vérification de l’adresse e-mail. La « sanisation » (ou purification) consiste à supprimer les caractères illégaux ou dangereux des données. WordPress propose des outils pour effectuer cette tâche.sanitize_text_field()sanitize_email()wp_kses_post()De nombreuses fonctions de nettoyage sont disponibles. L’« échappement » (Escaping) consiste à encoder de manière sécurisée les données avant de les afficher dans du HTML, du JavaScript ou des URL, afin de prévenir les attaques XSS. Il est donc essentiel d’utiliser des méthodes appropriées pour effectuer cet échappement.esc_html()esc_attr()esc_url()etwp_json_encode()et d'autres fonctions.

hosting.com Hébergement partagé
Hautes performances avec les CPU AMD EPYC, stockage SSD NVMe et LiteSpeed, support interne expert 24h/24 et 7j/7, mesures de sécurité avancées, notamment SSL, protection contre la force brute, les logiciels malveillants et le DDoS, économies pouvant aller jusqu'à 73%.

Lors du traitement de demandes non CE (demandes AJAX) dans un plugin, il est essentiel de vérifier…nonce(Chiffre utilisé une seule fois) Pour vérifier la légitimité de la demande et vérifier les autorisations de l'utilisateur actuel (Capacités).

// PHP端:生成nonce并输出到页面
wp_nonce_field( 'myplugin_ajax_action', 'myplugin_nonce' );

// JavaScript端:随AJAX请求发送nonce
jQuery.ajax({
    url: ajaxurl,
    type: 'POST',
    data: {
        action: 'myplugin_ajax_handler',
        nonce: jQuery('#myplugin_nonce').val(),
        // ... 其他数据
    }
});

// PHP端:处理AJAX请求时验证
function myplugin_ajax_handler() {
    check_ajax_referer( 'myplugin_ajax_action', 'nonce' );
    if ( ! current_user_can( 'edit_posts' ) ) {
        wp_die( '权限不足' );
    }
    // ... 处理安全请求
}
add_action( 'wp_ajax_myplugin_ajax_handler', 'myplugin_ajax_handler' );

De plus, la conformité aux normes de codage de WordPress est assurée, et une prise en charge complète de l’internationalisation est proposée (en utilisant…)__()et_e()Fonction, et utilisez-la.load_plugin_textdomain()charger le fichier de traduction ), ainsi que procéder au nettoyage des ressources nécessaires lorsque le plugin est désactivé (par exemple, en utilisant des mécanismes appropriés pour libérer de l'espace mémoire ou des ressources système ).register_uninstall_hook()Les options permettant de supprimer des bases de données constituent des pratiques de développement de plugins professionnelles indispensables.

résumés

Le développement de plugins pour WordPress consiste à intégrer des fonctionnalités personnalisées de manière fluide dans l’immense écosystème de ce système de gestion de contenu (CMS). Tout commence par un répertoire de plugins bien organisé et un fichier principal contenant les commentaires d’en-tête appropriés. L’essentiel réside dans l’utilisation maîtrisée des hooks d’actions et de filtres pour étendre le comportement par défaut de WordPress, ainsi que dans la création d’une interface de configuration conviviale pour les utilisateurs via des pages de gestion et des API. La sécurité doit être une priorité absolue, que ce soit lors de la validation des données, du nettoyage des informations, de l’échappement des caractères dangereux ou de la vérification des autorisations. En suivant les meilleures pratiques en matière d’internationalisation et de codage, vous garantirez que votre plugin soit stable, sécurisé et facile à maintenir, ce qui lui permettra de fonctionner de manière fiable sur des millions de sites web.

Lectures recommandées Partir de zéro : Guide complet de démarrage et tutoriel pratique pour le développement de plugins WordPress.

FAQ Foire aux questions

Quelles connaissances préalables sont nécessaires pour développer des plugins pour WordPress ?

Vous devez disposer d’une solide base en programmation PHP, et il sera très avantageux de comprendre les concepts de la programmation orientée objet (POO). De plus, vous devez avoir une connaissance de base d’HTML, CSS et JavaScript pour gérer l’affichage et l’interaction de l’interface utilisateur. Le plus important est de maîtriser les concepts fondamentaux de WordPress, tels que les hooks, l’API des options, les rôles d’utilisateurs et leurs droits, ainsi que la structure de la base de données.

Comment déboguer un plugin WordPress en cours de développement ?

Tout d’abord, assurez-vous que…wp-config.phpLe fichier est activé (ou « activé »).WP_DEBUGetWP_DEBUG_LOGCela enregistrera les informations d'erreur dans…/wp-content/debug.logCe contenu se trouve dans le fichier, mais il n’est pas affiché à l’utilisateur final (l’interface utilisateur).

Hébergement partagé InterServer
Hébergement mutualisé $2.50 USD par mois, premier mois $0.1 USD code promo tryinterserver, 461 scripts cloud apps, installation en un clic.

En utilisant des outils tels que le plugin Query Monitor, il est possible de consulter en temps réel les requêtes effectuées sur la base de données, l’exécution des fonctions de détection (« hooks »), les erreurs PHP ainsi que les données de performance. Pour le débogage logique, il est possible de combiner ces outils avec d’autres méthodes de débogage appropriées.error_log()Il est possible d’effectuer un suivi étape par étape des exécutions de fonctions à l’aide de fonctions et de débogueurs PHP professionnels tels que Xdebug.

Comment devrais-je ajouter des tables de base de données personnalisées à mon plugin ?

Vous ne devez envisager d’ajouter des tables personnalisées que lorsque la structure des tables de données de base de WordPress ne répond pas à vos besoins. Vous pouvez créer ces tables lors de l’activation d’un plugin, généralement en enregistrant une fonction qui s’exécute à ce moment-là.

Dans cette fonction, utilisez…dbDelta()Cette fonction permet de créer ou mettre à jour la structure d’une table de manière sécurisée. Elle nécessite l’accès à toutes les informations nécessaires pour effectuer ces opérations.CREATE TABLE Les instructions SQL sont très soigneusement conçues, et les modifications apportées à la structure des tables sont gérées avec prudence. L’instruction SQL dont vous avez besoin peut être obtenue à l’aide d’une variable globale.$wpdbExécutez-le.

Comment faire en sorte que mon plugin soit compatible avec plusieurs langues (internationalisation) ?

Tout d’abord, définez dans les commentaires en tête du fichier principal du plugin.Text DomainEt l’utiliser lors du chargement du plugin.load_plugin_textdomain()La fonction charge le fichier de traduction. Dans tous les plugins, toutes les chaînes de caractères qui nécessitent une traduction sont utilisées…__()(Retourner à la chaîne de traduction) ou_e()Les fonctions sont encapsulées dans des classes ou des modules. Ensuite, vous pouvez utiliser des outils tels que Poedit pour générer le code nécessaire à leur utilisation..potFichiers de modèle, destinés aux traducteurs pour créer des versions dans une langue spécifique..poet.moLes documents.