Architecture d’un plugin
Un plugin WordPress bien structuré facilite la maintenance et les mises à jour.
mon-plugin/
├── mon-plugin.php # Fichier principal (headers)
├── includes/
│ ├── class-plugin.php # Classe principale
│ ├── class-admin.php # Fonctionnalités admin
│ └── class-public.php # Fonctionnalités front
├── admin/
│ ├── views/ # Templates admin
│ └── css/ # Styles admin
├── public/
│ ├── views/ # Templates front
│ └── css/ # Styles front
├── languages/ # Traductions
├── uninstall.php # Nettoyage à la désinstallation
└── readme.txt # Documentation
Lueur Externe développe des plugins WordPress sur mesure pour étendre les fonctionnalités de vos sites.
Fichier principal
<?php
/**
* Plugin Name: Mon Plugin Custom
* Description: Plugin développé par Lueur Externe
* Version: 1.0.0
* Author: Lueur Externe
* Author URI: https://lueurexterne.com
* Text Domain: mon-plugin
* Domain Path: /languages
* Requires PHP: 8.0
* Requires at least: 6.0
*/
defined('ABSPATH') || exit;
define('MON_PLUGIN_VERSION', '1.0.0');
define('MON_PLUGIN_PATH', plugin_dir_path(__FILE__));
define('MON_PLUGIN_URL', plugin_dir_url(__FILE__));
require_once MON_PLUGIN_PATH . 'includes/class-plugin.php';
function mon_plugin_init() {
return Mon_Plugin::instance();
}
add_action('plugins_loaded', 'mon_plugin_init');
// Activation
register_activation_hook(__FILE__, ['Mon_Plugin', 'activate']);
register_deactivation_hook(__FILE__, ['Mon_Plugin', 'deactivate']);
Hooks : actions et filtres
Actions
// Ajouter une action au chargement de l'admin
add_action('admin_init', function () {
// Enregistrer les réglages
register_setting('mon_plugin_options', 'mon_plugin_api_key', [
'type' => 'string',
'sanitize_callback' => 'sanitize_text_field',
]);
});
// Ajouter un menu admin
add_action('admin_menu', function () {
add_options_page(
'Mon Plugin',
'Mon Plugin',
'manage_options',
'mon-plugin',
'mon_plugin_settings_page'
);
});
Filtres
// Modifier le contenu des articles
add_filter('the_content', function ($content) {
if (is_single() && get_option('mon_plugin_add_cta')) {
$cta = '<div class="plugin-cta">
<p>Besoin d\'aide ? <a href="https://lueurexterne.com">Contactez Lueur Externe</a></p>
</div>';
$content .= $cta;
}
return $content;
});
// Modifier la requête principale
add_filter('pre_get_posts', function ($query) {
if (!is_admin() && $query->is_main_query() && $query->is_search()) {
$query->set('posts_per_page', 20);
}
return $query;
});
Settings API
function mon_plugin_settings_page() {
?>
<div class="wrap">
<h1><?php echo esc_html(get_admin_page_title()); ?></h1>
<form method="post" action="options.php">
<?php
settings_fields('mon_plugin_options');
do_settings_sections('mon-plugin');
submit_button();
?>
</form>
</div>
<?php
}
Sécurité
// Vérifier les nonces
if (!wp_verify_nonce($_POST['_wpnonce'], 'mon_plugin_action')) {
wp_die('Sécurité : nonce invalide');
}
// Vérifier les capacités
if (!current_user_can('manage_options')) {
wp_die('Accès non autorisé');
}
// Échapper les sorties
echo esc_html($variable);
echo esc_url($url);
echo esc_attr($attribute);
echo wp_kses_post($html_content);
// Préparer les requêtes SQL
$results = $wpdb->get_results(
$wpdb->prepare("SELECT * FROM {$wpdb->prefix}table WHERE id = %d", $id)
);
Conclusion
Le développement de plugins WordPress demande rigueur et connaissance des conventions de la plateforme. Lueur Externe crée des plugins sur mesure, sécurisés et performants pour étendre les fonctionnalités de vos sites WordPress.