F4HXN

Créer une extension WordPress

Publié le 20 octobre 2023 Par F4HXN

Créer sa première extension WordPress est un excellent moyen de comprendre le fonctionnement du CMS. Dans ce tutoriel, nous construisons un petit plugin complet et fonctionnel : un calculateur qui affiche la longueur d’onde correspondant à une fréquence, utilisable partout sur le site grâce à un shortcode [longueur_onde].

Contrairement à l’ancienne version de cette page, le calcul se fait ici côté navigateur (JavaScript), ce qui donne un résultat instantané sans rechargement de page. C’est l’approche la plus adaptée pour un simple calculateur. Nous verrons en fin d’article comment procéder lorsque le traitement doit se faire côté serveur.

Le résultat, tout de suite

Voici exactement ce que le plugin affichera une fois installé. Essayez : saisissez une fréquence, choisissez l’unité, et cliquez sur « Calculer ».

Démonstration en direct

1

La structure des fichiers

Une extension WordPress vit dans le dossier wp-content/plugins/. On lui crée un répertoire propre, puis on y range le fichier principal (celui qui porte l’en-tête du plugin) ainsi que les ressources annexes. Pour ce projet, l’arborescence est la suivante :

wp-content/plugins/
└── calculateur-longueur-onde/
   ├── calculateur-longueur-onde.php ← fichier principal
   └── assets/
     ├── calculateur.js ← le calcul
     └── calculateur.css ← la mise en forme

Séparer le code (PHP), le comportement (JS) et l’apparence (CSS) n’est pas obligatoire pour un plugin aussi simple, mais c’est une habitude saine qui rend le tout bien plus facile à maintenir.

2

Le fichier principal du plugin

C’est le cœur de l’extension. Son en-tête de commentaire (le bloc Plugin Name) est ce qui permet à WordPress de la reconnaître et de l’afficher dans le tableau de bord. Ce fichier déclare le shortcode et charge proprement les ressources.

calculateur-longueur-onde.php
<?php
/**
 * Plugin Name: Calculateur de longueur d'onde
 * Description: Ajoute le shortcode [longueur_onde] qui calcule la longueur d'onde a partir d'une frequence.
 * Version:     1.0.0
 * Author:      F4HXN
 * License:     GPL-2.0-or-later
 * Text Domain: calculateur-longueur-onde
 */

// On empeche l'acces direct au fichier.
if ( ! defined( 'ABSPATH' ) ) {
    exit;
}

// On enregistre le style et le script du plugin.
function f4hxn_lo_register_assets() {
    wp_register_style(
        'f4hxn-lo',
        plugins_url( 'assets/calculateur.css', __FILE__ ),
        array(),
        '1.0.0'
    );

    wp_register_script(
        'f4hxn-lo',
        plugins_url( 'assets/calculateur.js', __FILE__ ),
        array(),
        '1.0.0',
        true // charge dans le pied de page
    );
}
add_action( 'wp_enqueue_scripts', 'f4hxn_lo_register_assets' );

// Le shortcode [longueur_onde] : il affiche le formulaire.
function f4hxn_lo_shortcode() {
    // On ne charge les fichiers que sur les pages qui utilisent le shortcode.
    wp_enqueue_style( 'f4hxn-lo' );
    wp_enqueue_script( 'f4hxn-lo' );

    ob_start();
    ?>
    <div class="f4hxn-lo" data-lo>
        <label class="f4hxn-lo-label">Frequence
            <span class="f4hxn-lo-row">
                <input type="number" class="f4hxn-lo-freq" step="any" min="0"
                       inputmode="decimal" placeholder="145.500">
                <select class="f4hxn-lo-unit">
                    <option value="1">Hz</option>
                    <option value="1000">kHz</option>
                    <option value="1000000" selected>MHz</option>
                    <option value="1000000000">GHz</option>
                </select>
            </span>
        </label>
        <button type="button" class="f4hxn-lo-btn">Calculer</button>
        <p class="f4hxn-lo-result" role="status" aria-live="polite"></p>
    </div>
    <?php
    return ob_get_clean();
}
add_shortcode( 'longueur_onde', 'f4hxn_lo_shortcode' );

Trois points méritent l’attention :

Le garde ABSPATH empêche l’exécution du fichier en accès direct. C’est un réflexe de sécurité standard sur tout fichier de plugin.

Le préfixe f4hxn_lo_ devant chaque fonction évite les collisions de noms avec les autres plugins. Sur WordPress, toutes les fonctions partagent le même espace de noms : préfixer est indispensable.

Le chargement conditionnel : on enregistre le CSS et le JS globalement, mais on ne les charge (wp_enqueue_*) qu’à l’intérieur du shortcode. Les fichiers ne sont donc jamais envoyés sur les pages qui n’en ont pas besoin.

3

Le calcul, côté navigateur

Le fichier JavaScript contient toute la logique. La longueur d’onde se déduit de la vitesse de la lumière divisée par la fréquence (λ = c / f). Le script convertit d’abord la valeur saisie en hertz selon l’unité choisie, puis met en forme le résultat dans une unité lisible (km, m, cm ou mm).

assets/calculateur.js
(function () {
    'use strict';

    // Vitesse de la lumiere dans le vide, en metres par seconde.
    var C = 299792458;

    function formater(m) {
        if (m >= 1000) { return (m / 1000).toFixed(3) + ' km'; }
        if (m >= 1)    { return m.toFixed(3) + ' m'; }
        if (m >= 0.01)  { return (m * 100).toFixed(2) + ' cm'; }
        return (m * 1000).toFixed(2) + ' mm';
    }

    document.querySelectorAll('[data-lo]').forEach(function (widget) {
        var freq   = widget.querySelector('.f4hxn-lo-freq');
        var unit   = widget.querySelector('.f4hxn-lo-unit');
        var btn    = widget.querySelector('.f4hxn-lo-btn');
        var result = widget.querySelector('.f4hxn-lo-result');

        function calculer() {
            var valeur = parseFloat(freq.value);

            if (isNaN(valeur) || valeur <= 0) {
                result.textContent = 'Veuillez saisir une frequence superieure a zero.';
                return;
            }

            var hertz  = valeur * parseFloat(unit.value);
            var lambda = C / hertz;

            result.textContent = 'Longueur d\'onde : ' + formater(lambda);
        }

        btn.addEventListener('click', calculer);
        freq.addEventListener('keydown', function (e) {
            if (e.key === 'Enter') { calculer(); }
        });
    });
})();

À noter : le script sélectionne chaque calculateur par son attribut data-lo et travaille à l’intérieur avec des classes. On peut ainsi placer plusieurs fois le shortcode sur une même page sans le moindre conflit.

4

Un peu de style

Dernier fichier : le CSS, qui donne au formulaire une apparence soignée. Rien d’obligatoire ici, mais un plugin qui s’intègre bien visuellement fait toujours meilleure impression.

assets/calculateur.css
.f4hxn-lo{max-width:440px;font-family:"DM Sans",system-ui,sans-serif}
.f4hxn-lo-label{display:block;font-weight:600;color:#1a2732;margin-bottom:.4em}
.f4hxn-lo-row{display:flex;gap:.5em;margin-top:.45em}
.f4hxn-lo-freq{flex:1;padding:.6em .75em;border:1px solid #cdd6df;border-radius:8px;font-size:1rem}
.f4hxn-lo-unit{padding:.6em .75em;border:1px solid #cdd6df;border-radius:8px;background:#fff}
.f4hxn-lo-btn{margin-top:.9em;padding:.6em 1.4em;border:0;border-radius:8px;
    background:#0076a5;color:#fff;font-weight:600;cursor:pointer;transition:background .15s ease}
.f4hxn-lo-btn:hover{background:#298ad4}
.f4hxn-lo-result{margin:1em 0 0;font-weight:600;color:#0076a5;min-height:1.4em}
5

Activer et utiliser le plugin

  1. Placez le dossier calculateur-longueur-onde dans wp-content/plugins/ (par FTP ou via le gestionnaire de fichiers de votre hébergeur).
  2. Rendez-vous dans le tableau de bord WordPress, menu Extensions, et cliquez sur Activer en regard de « Calculateur de longueur d’onde ».
  3. Dans n’importe quelle page ou article, insérez le shortcode :
shortcode
[longueur_onde]

Le formulaire apparaîtra à l’emplacement du shortcode, exactement comme la démonstration en haut de cette page.

Et si le calcul devait se faire côté serveur ?

Notre calculateur se contente de JavaScript parce que l’opération est purement mathématique et sans donnée sensible. Mais dès qu’un traitement doit passer par le serveur (interroger une base de données, appeler une API, écrire un fichier…), il faut adopter une autre approche.

WordPress propose pour cela deux mécanismes : l’API AJAX (admin-ajax) et l’API REST. Dans les deux cas, deux règles d’or : toujours nettoyer les données entrantes (avec sanitize_text_field(), floatval(), etc.) et toujours échapper les données sortantes (esc_html(), esc_attr()…). On y ajoute un nonce pour se prémunir des requêtes falsifiées. C’est le prix d’un plugin robuste et sûr.

Pour mémoire

WordPress est un système de gestion de contenu (CMS) open source, écrit en PHP et généralement adossé à une base de données MySQL. Lancé en 2003, il fait aujourd’hui tourner une part considérable des sites du web, du blog personnel à la boutique en ligne.

Une extension (ou plugin) est un module qui vient greffer de nouvelles fonctionnalités sur WordPress sans toucher à son cœur. C’est précisément ce que nous venons de faire : quelques dizaines de lignes suffisent pour ajouter un outil réutilisable à l’ensemble du site.

À lire également

Un nouveau plugin WordPress pour plus de transparence

Depuis plusieurs mois, l'intelligence artificielle fait partie des outils utilisés par de nombreux créateurs de contenus. Elle peut être une aide précieuse pour améliorer la qualité rédactionnelle, corriger des erreurs ou assister dans certaines tâches répétitives. Afin de rester totalement transparent avec les lecteurs et de conserver une démarche honnête, j'ai développé (avec l'aide de l'IA) un petit plugin WordPress…

À lire également

pages

Comprendre la Différence entre Articles et Pages dans WordPress

Dans le monde de WordPress, deux types de contenus dominent : les articles et les pages. À première vue, ils peuvent sembler similaires, mais ils servent en réalité des objectifs très différents. Comprendre ces différences est essentiel pour tout utilisateur de WordPress, qu'il s'agisse d'un blogueur débutant ou d'un développeur de sites web expérimenté. Qu'est-ce qu'un Article dans WordPress ?Les…