Base de la développement d’extensions pour WordPress
Avant de plonger dans le code, il est essentiel de comprendre les concepts de base et la structure des plugins WordPress. Un plugin WordPress est essentiellement un script PHP supplémentaire qui interagit avec le noyau de WordPress via le système de crochets (Hooks) mis à disposition par ce dernier, afin d’élargir ou de modifier les fonctionnalités du site web. Il peut s’agir d’un seul fichier, ou d’un répertoire complet contenant plusieurs fichiers, des feuilles de style CSS et des scripts JavaScript.
La tâche primordiale dans le développement d’un plugin est de créer un fichier principal qui respecte les normes. Ce fichier principal est généralement nommé d’après le nom du plugin.my-custom-plugin.phpEn haut du fichier, il doit y avoir un bloc de commentaires contenant les informations standard relatives à votre plugin. Ces commentaires servent non seulement à décrire votre plugin à WordPress, mais ils seront également affichés sur la page de gestion des plugins en arrière-plan.
/**
* Plugin Name: 我的自定义功能扩展
* Plugin URI: https://example.com/my-custom-plugin
* Description: 这是一个用于演示的WordPress插件,用于添加自定义功能。
* Version: 1.0.0
* Author: 开发者名称
* Author URI: https://example.com
* License: GPL v2 or later
* Text Domain: my-custom-plugin
*/ Dans les commentaires…Plugin NameCes champs sont obligatoires ; les autres sont optionnels, mais il est conseillé de les remplir. Après avoir créé ce fichier, placez-le dans…/wp-content/plugins/Un dossier indépendant situé dans le répertoire (par exemple…)my-custom-pluginDans ce cas, vous pourrez le voir et l’activer sur la page des “ Plugins ” dans l’administration de WordPress.
Lectures recommandées De l'initiation à la pratique : un guide complet du développement de plugins WordPress et des techniques avancées.。
Le mécanisme de fonctionnement fondamental des plugins WordPress repose sur des “ hooks ” (crochets). Il existe deux types de hooks : les hooks d’action (action hooks) et les hooks de publication (publication hooks).(Action Hooks)Filtres et hooks(Filter Hooks)Les « action hooks » vous permettent d’exécuter du code personnalisé à des moments précis, par exemple lors du chargement de la partie supérieure de la page ou de la publication d’un article.add_action()La fonction permet d’associer votre propre fonction à un événement (ou un « hook ») défini dans le système.
Les hooks de filtre vous permettent de modifier les données générées au cours du processus. Par exemple, le contenu des articles est soumis à une série de filtres avant d’être affiché.add_filter()Les fonctions peuvent modifier ces données.
L’internationalisation et la localisation font partie intégrante des plugins professionnels. En les utilisant…__( ‘文本’, ‘text-domain’ )Ou_e( ‘文本’, ‘text-domain’ )La fonction enveloppe toutes les chaînes de caractères visibles par l'utilisateur et, en combinaison avec les champs de texte à charger, permet à l’extension de prendre en charge plusieurs langues.Text DomainIl doit être cohérent avec les informations définies dans la tête du plugin, qui correspondent généralement au nom du répertoire du plugin ou à la version du nom du fichier principal (sous forme de « slug »).
Créez votre premier plugin
Commençons par créer un plugin simple qui ajoutera une colonne de gestion personnalisée à la liste des articles d'un site web, permettant d'afficher le nombre de mots de chaque article. Cet exemple couvre les étapes de base de la création d'un plugin, de l’utilisation des « hooks » (mécanismes d’interaction avec le système) et de l’affichage des données de manière sécurisée.
Tout d’abord, dans votre…/wp-content/plugins/Créer un nouveau dossier dans le répertoire et le nommermy-first-extensionDans ce dossier, créez le fichier principal.my-first-extension.phpEt ajoutez les informations relatives aux en-têtes des plugins décrites dans la section précédente.
Lectures recommandées Guide de début pour le développement de plugins WordPress : Créez vos propres modules de fonctionnalités personnalisées à partir de zéro。
Ensuite, nous devons ajouter une nouvelle colonne à la liste de gestion des articles. Cela implique deux action hooks :manage_posts_columnsetmanage_posts_custom_columnLe premier est utilisé pour définir les en-têtes des nouvelles colonnes, tandis que le second est utilisé pour remplir le contenu de chaque ligne de cette colonne.
// 为文章列表添加“字数统计”列
function mfe_add_word_count_column( $columns ) {
$columns['word_count'] = __( '字数统计', 'my-first-extension' );
return $columns;
}
add_filter( 'manage_posts_columns', 'mfe_add_word_count_column' );
// 填充“字数统计”列的内容
function mfe_display_word_count_column( $column, $post_id ) {
if ( $column === 'word_count' ) {
$post_content = get_post_field( 'post_content', $post_id );
$word_count = str_word_count( strip_tags( $post_content ) );
echo esc_html( $word_count );
}
}
add_action( 'manage_posts_custom_column', 'mfe_display_word_count_column', 10, 2 ); Dans ce code,mfe_add_word_count_columnLa fonction prend en entrée un array de colonnes existantes et y ajoute une nouvelle colonne.word_countRetournez l'élément spécifié par la clé et l'array modifié.add_filterLe connecter à…manage_posts_columnsSur le filtre.mfe_display_word_count_columnLa fonction vérifie d’abord si la colonne actuellement traitée est bien la colonne “ word_count ” que nous avons ajoutée, puis elle récupère le contenu de l’article et l’utilise…strip_tags()Supprimez les balises HTML, puis utilisez le contenu restant.str_word_count()Calculer le nombre de mots (ou, pour le chinois, le nombre de caractères), puis utiliser le résultat final.esc_html()Après avoir effectué les échappements de sécurité nécessaires, le résultat est affiché.
Ce plugin simple dispose déjà des fonctionnalités de base, mais un plugin plus avancé devrait également prendre en compte l’exécution de certaines actions lors de son activation ou de sa désactivation. Par exemple, il serait possible de créer des tables de base de données personnalisées ou de nettoyer des options temporaires. Cela peut être réalisé en enregistrant des fonctions d’hook (des routines qui s’exécutent à des moments spécifiques).
// 插件激活时执行的操作
function mfe_plugin_activation() {
// 例如:添加一个版本号选项,用于后续升级判断
if ( ! get_option( 'mfe_plugin_version' ) ) {
add_option( 'mfe_plugin_version', '1.0.0' );
}
// 触发一个自定义动作,供其他开发者扩展
do_action( 'mfe_plugin_activated' );
}
register_activation_hook( __FILE__, 'mfe_plugin_activation' );
// 插件停用时执行的操作
function mfe_plugin_deactivation() {
// 例如:清除计划任务或临时数据
// 注意:通常不在停用时删除用户数据(如表)
}
register_deactivation_hook( __FILE__, 'mfe_plugin_deactivation' ); Veuillez noter que…register_activation_hooketregister_deactivation_hookLe chemin complet du fichier principal est nécessaire.FILELa constante doit être utilisée comme premier paramètre. La logique permettant d’activer, de désactiver et de désinstaller le plugin (la désinstallation a lieu lorsque l’utilisateur supprime le plugin) doit être gérée de manière distincte.
Réaliser la page de configuration des plugins
Un plugin complet et fonctionnel doit généralement offrir aux utilisateurs des options de configuration. La méthode la plus standard consiste à créer une page de paramétrage dans l’administration de WordPress. Cela peut être réalisé en utilisant…add_menu_page()Ouadd_options_page()Ces fonctions sont utilisées pour réaliser certaines tâches.
Nous allons d’abord créer un élément de menu de niveau supérieur. Dans l’exemple ci-dessous,mfe_create_admin_menuUtilisation de la fonctionadd_menu_page()Ajoutons une nouvelle page. Cette fonction nécessite le titre de la page, le titre du menu, les autorisations requises, le slug du menu, une fonction de rappel pour afficher le contenu de la page, l’URL de l’icône, ainsi que l’emplacement du menu.
Lectures recommandées Partir de zéro : Guide complet du développement d’un plugin WordPress et partage des meilleures pratiques.。
// 创建后台管理菜单
function mfe_create_admin_menu() {
add_menu_page(
__( '我的扩展设置', 'my-first-extension' ), // 页面标题
__( '我的扩展', 'my-first-extension' ), // 菜单标题
'manage_options', // 权限(管理员)
'mfe-settings', // 菜单slug
'mfe_settings_page_html', // 显示页面内容的函数
'dashicons-admin-generic', // 图标
80 // 位置
);
}
add_action( 'admin_menu', 'mfe_create_admin_menu' ); Ensuite, nous devons définir…mfe_settings_page_htmlUne fonction est utilisée pour rendre le contenu de la page. Une page de configuration professionnelle devrait utiliser l’API de configuration standard de WordPress, qui s’occupe du traitement des soumissions de formulaires, de la validation des champs et d’autres tâches complexes (comme celles liées à la sécurité). Tout d’abord, nous devons utiliser…register_setting()S’inscrire à un groupe de paramètres et à des champs.
// 初始化设置
function mfe_settings_init() {
// 注册一个新的设置组 “mfe_settings_group” 到页面 “mfe-settings”
register_setting( 'mfe-settings', 'mfe_settings_options' );
// 在设置组内添加一个区域(Section)
add_settings_section(
'mfe_settings_section',
__( '基本设置', 'my-first-extension' ),
'mfe_settings_section_cb',
'mfe-settings'
);
// 在区域内添加一个字段
add_settings_field(
'mfe_field_api_key',
__( 'API密钥', 'my-first-extension' ),
'mfe_field_api_key_cb',
'mfe-settings',
'mfe_settings_section',
[ 'label_for' => 'mfe_field_api_key' ]
);
}
add_action( 'admin_init', 'mfe_settings_init' ); Ensuite, nous devons définir des fonctions de rappel pour les zones et les champs afin d'afficher le HTML. Les fonctions de rappel pour les champs sont particulièrement importantes, car elles rendent les champs d'entrée du formulaire et s'assurent que leurs valeurs correspondent aux paramètres enregistrés.
// 设置区域的说明文本
function mfe_settings_section_cb( $args ) {
?>
<p id="<?php echo esc_attr( $args['id'] ); ?>"><?php esc_html_e( '请在此配置插件的基本参数。', 'my-first-extension' ); ?></p>
<?php
}
// API密钥字段的回调函数
function mfe_field_api_key_cb( $args ) {
// 从已注册的设置选项中获取值
$options = get_option( 'mfe_settings_options' );
$value = $options[ $args['label_for'] ] ?? '';
?>
<input type="text"
id="<?php echo esc_attr( $args['label_for'] ); ?>"
name="mfe_settings_options[<?php echo esc_attr( $args['label_for'] ); ?>]"
value="<?php echo esc_attr( $value ); ?>"
class="regular-text">
<p class="description"><?php esc_html_e( '请输入您的服务API密钥。', 'my-first-extension' ); ?></p>
<?php
} Enfin, créez la fonction pour la page des paramètres principaux, en utilisant…settings_fields()etdo_settings_sections()Affichez tout le formulaire de manière sécurisée.
// 设置页面的HTML结构
function mfe_settings_page_html() {
// 检查用户权限
if ( ! current_user_can( 'manage_options' ) ) {
return;
}
?>
<div class="wrap">
<h1></h1>
<form action="/fr/options.php/" method="post" data-trp-original-action="options.php">
<?php
// 输出安全字段、区域和字段
settings_fields( 'mfe-settings' );
do_settings_sections( 'mfe-settings' );
submit_button( __( '保存设置', 'my-first-extension' ) );
?>
<input type="hidden" name="trp-form-language" value="fr"/></form>
</div>
<?php
} De cette manière, lorsque vous créez une page de paramètres, la validation, le nettoyage et l’enregistrement de tous les données des formulaires sont gérés automatiquement par l’API des paramètres de WordPress, et les données sont stockées…wp_optionsDans le tableau, la colonne nommée…mfe_settings_optionsParmi les options proposées, la sécurité et la commodité ont été considérablement améliorées.
Sécurité des plugins et bonnes pratiques
Il est nécessaire de développer un plugin professionnel, sécurisé et facile à maintenir, en suivant une série de bonnes pratiques. Le principe fondamental est de ne jamais faire confiance aux données saisies par les utilisateurs. Toutes les données provenant de l’extérieur (par exemple…) doivent être traitées avec prudence et vérifiées avant d’être utilisées.$_GET、$_POST、$_COOKIELes données provenant de diverses sources (y compris les bases de données) doivent être vérifiées, nettoyées et échappées de manière appropriée avant d’être affichées, utilisées ou stockées.
Vérification et nettoyage des données : Avant d’utiliser des données pour des raisonnements logiques, il est nécessaire de vérifier si elles correspondent au format attendu. Par exemple, si un champ est censé contenir un nombre, il faut utiliser des méthodes appropriées pour s’assurer que la valeur saisie est bien numérique.intval()Ouis_numeric()WordPress propose de nombreuses fonctions d’assistance, telles que…sanitize_text_field()Utilisé pour nettoyer des chaînes de texte.sanitize_email()Utilisé pour nettoyer les adresses e-mail.
Échappement des données : Lorsque vous affichez des données dans HTML, JavaScript ou des URL, il est indispensable d’effectuer un échappement pour éviter les attaques de type cross-site scripting (XSS).esc_html()Exporter le texte brut en HTML,esc_attr()Affichez le contenu dans les attributs HTML.esc_url()Veuillez fournir l'URL souhaité.wp_json_encode()Combinaisonwp_slash()Transmettre le contenu en JavaScript.
Une erreur de sécurité courante consiste à utiliser des variables non vérifiées directement dans les requêtes de base de données, ce qui peut entraîner des injections SQL. Il est absolument interdit de concaténer manuellement les instructions SQL. Il est préférable d’utiliser les fonctionnalités mises à disposition par WordPress pour générer et exécuter ces requêtes de manière sécurisée.$wpdbLes classes et leurs méthodes de préparation des requêtes.
global $wpdb;
$user_input = $_POST['search_term'];
// 错误做法:直接拼接
// $sql = “SELECT * FROM {$wpdb->posts} WHERE post_title LIKE ‘%$user_input%’”;
// 正确做法:使用prepare方法
$sql = $wpdb->prepare(
“SELECT * FROM {$wpdb->posts} WHERE post_title LIKE %s”,
‘%’ . $wpdb->esc_like( $user_input ) . ‘%’
);
$results = $wpdb->get_results( $sql ); Vérification des autorisations : Avant de réaliser toute opération de gestion, de modification de données ou d'affichage d'informations sensibles par un plugin, il est indispensable de vérifier si l'utilisateur actuel dispose des autorisations nécessaires pour effectuer cette action.current_user_can( $capability )Oucheck_admin_referer()… etc., afin de procéder à des vérifications.
chargement séquentiel des scripts et des feuilles de style : ne faites jamais cela directement à l’intérieur d’un plugin.<link>Ou<script>Les balises introduisent des fichiers CSS et JS. Il convient d'utiliser <wp_enqueue_style()etwp_enqueue_script()Fonction, et assurez-vous qu’elle soit utilisée dans les bons moments (ou hooks appropriés), comme par exemple…wp_enqueue_scriptsUtilisé pour le côté client (front-end).admin_enqueue_scriptsCela est conçu pour être exécuté en arrière-plan. Cela permet d’éviter les conflits et de s’assurer que les dépendances soient chargées correctement.
Organisation du code et conventions de nommage : utilisez des préfixes uniques pour les fonctions, les classes, les variables et les noms d’options de votre plugin (par exemple…)mfe_Cela permet d’éviter les conflits avec le thème, d’autres plugins ou le noyau de WordPress. Organiser les plugins complexes en plusieurs fichiers et utiliser la programmation orientée objet (POO) peut améliorer la lisibilité et la réutilisabilité du code.
Fournir une fonction de désinstallation et de nettoyage : Si le plugin a créé des tables de base de données ou des options personnalisées, il est conseillé de proposer une fonction de nettoyage lorsque l’utilisateur choisit de “supprimer” le plugin (plutôt que de simplement le “désactiver”). Cela peut être réalisé à l’aide d’un fichier de désinstallation distinct. Dans le fichier principal du plugin, il est possible d’implémenter cette fonction.register_uninstall_hook( FILE, ‘mfe_plugin_uninstall’ )Pour régister la fonction de désinstallation, il est possible de le faire directement, mais la pratique la plus courante consiste à créer un fichier dans le répertoire des plugins.uninstall.phpLorsque vous supprimez un plugin, WordPress exécute automatiquement ce fichier.
résumés
Le développement de plugins pour WordPress est un processus qui combine une pensée structurée ainsi qu’une compréhension approfondie de l’architecture de base de WordPress. De la rédaction des informations de tête des plugins conformes aux normes, à la maîtrise des hooks d’actions et des hooks de filtres, tous ces éléments constituent les fondamentaux pour créer toute extension de fonctionnalités. Pour créer un plugin pratique, il est nécessaire non seulement de mettre en œuvre des fonctionnalités côté utilisateur (front-end), mais aussi de concevoir une interface d’administration claire et sécurisée, ce qui peut être réalisé efficacement à l’aide de l’API d’administration de WordPress.
La sécurité est une ligne de vie essentielle tout au long du processus de développement : de la validation des données saisies, à l’échappement des données affichées, en passant par la vérification des autorisations et les opérations sur la base de données. Aucun de ces étapes ne peut être négligé. En suivant les meilleures pratiques (telles que l’ordonnancement correct du chargement des scripts, l’utilisation de préfixes uniques et une structure de code bien organisée), votre plugin deviendra plus fiable, plus facile à maintenir et pourra coexister harmonieusement avec l’immense écosystème WordPress. Grâce aux étapes décrites dans ce guide, vous avez acquis les connaissances et les compétences essentielles pour créer un plugin de niveau professionnel à partir de zéro.
FAQ Foire aux questions
Comment ajouter un raccourci de code à mon plugin ?
Les codes courts permettent aux utilisateurs d’insérer facilement des fonctionnalités de plugins dans des articles ou des pages.add_shortcode()Utilisez une fonction pour enregistrer votre code court.
Créez une fonction de rappel (callback) qui gère la logique des codes courts. Cette fonction reçoit des attributs…$atts) et le contenu ($content)参数,并返回处理后的HTML。记住,短码回调函数必须返回(return)内容,而不是直接输出(echo)。返回的内容也需要进行适当的转义以确保安全。
Où devraient être stockées les options des plugins ?
Pour la configuration simple de paires clé-valeur, il est fortement conseillé d’utiliser l’API Options de WordPress.add_option()、get_option()etupdate_option()Fonction. Ces données seront automatiquement stockées.wp_optionsDans la table de la base de données.
Si votre plugin a besoin de stocker de grandes quantités de données structurées (par exemple, des entrées de formulaires ou des journaux), vous devriez envisager la création de tables de base de données personnalisées.dbDelta()Des fonctions sont mises en place pour garantir que la création et la mise à jour de la structure des tables soient sûres et compatibles. La création de tables personnalisées est généralement gérée à l’intérieur des hooks d’activation des plugins.
Comment mon plug-in est-il compatible avec d'autres plug-ins ou thèmes ?
La clé pour améliorer la compatibilité est de suivre les normes de codage de WordPress, d’utiliser des préfixes uniques, et de fournir des points d’extension grâce aux hooks. Il est conseillé d’éviter de modifier directement les fichiers du noyau ou les variables globales.
Dans votre plugin, utilisez…do_action()Ouapply_filters()Créez des crochets personnalisés qui permettront aux autres développeurs de modifier ou d’élargir le fonctionnement de votre plugin. De plus, avant d’exécuter des opérations qui pourraient entraîner des conflits (telles que l’ajout de styles ou de scripts), utilisez des vérifications conditionnelles ou proposez une option pour les désactiver.
Comment ajouter un mécanisme de mise à jour pour un plugin ?
Pour les plugins hébergés dans le catalogue officiel de plugins de WordPress, les mises à jour sont gérées automatiquement. Pour les plugins privés ou commerciaux, vous devez mettre en place un vérificateur de mises à jour personnalisé.
Cela implique généralement la création d’une classe qui vérifie régulièrement la présence de nouvelles versions sur votre serveur distant et permet aux utilisateurs de mettre à jour leur installation en un seul clic. Vous pouvez vous référer à des bibliothèques comme “Plugin Update Checker” pour vous y aider, ou bien implémenter le système vous-même. L’essentiel est d’utiliser des techniques permettant de détecter les mises à jour et de faciliter leur installation par l’utilisateur.set_site_transient()Des crochets, comme…pre_set_site_transient_update_pluginsUtilisez ce canal pour injecter vos informations d’actualisation. Assurez-vous que le serveur d’actualisation est sécurisé et fiable.
Quelle est la suite, quelle est la suite ?
Lecture approfondie et connaissances pratiques
Les articles suivants sont liés au sujet de cet article et peuvent faire l'objet d'une lecture plus approfondie. Il est souvent préférable de commencer par l'article qui se rapproche le plus de votre problème actuel, puis d'étendre progressivement la lecture aux sujets environnants.
- Guide de début pour la création de sites web : maîtriser l'ensemble du processus de développement de sites web modernes, de zéro à un
- Guide de développement de plugins pour WordPress : Créez votre premier plugin personnalisé de zéro à un
- Qu’est-ce qu’un sous-thème WordPress ?
- Devenir développeur de plugins pour WordPress : Un guide complet de A à Z
- Maîtriser le développement de thèmes WordPress : Un guide complet pour créer des sites web professionnels à partir de zéro