WordPress peut être étendu à volonté à l’aide de plugins, c’est à dire qu’on peut lui rajouter des fonctionnalités.
Presque tous les sites Web WordPress contiennent des plugins, tellement c’est pratique.
Dans cet article, je vais vous montrer étape par étape comment créer vous-même un plugin.

Qu’est-ce qu’un plugin WordPress ?

Comparé à d’autres systèmes de gestion de contenu, WordPress est simple à appréhender. Cela présente l’avantage d’être plus facile à apprendre qu’un système doté d’une gamme de fonctions plus large.

Pour étendre les fonctionnalités de WordPress, des modules supplémentaires peuvent être installés. Ceux-ci sont appelés « plugins » (ou « extensions » en français) dans WordPress.

Il existe actuellement près de 60 000 plugins disponibles dans le répertoire des plugins wordpress.org . Il existe également d’innombrables autres sources de plugins WordPress.
Si vous avez un besoin, il est probable que d’autres avant vous aussi, et qu’une solution ait été développé sous forme de plugin.

Pourquoi ai-je besoin d’un plugin WordPress ?

Semblables aux plugins, de nombreux thèmes étendent également les fonctionnalités de WordPress.
Un thème représente l’ensemble des fichiers permettant de définir l’apparence d’un site. Souvent un thème se démarque d’un autre car il embarque certaines fonctionnalités intéressantes, comme OceanWP, par exemple.

Par exemple, certains thèmes offrent la possibilité d’installer un slider, d’intégrer un flux Instagram ou de créer une page portfolio – pour ne citer que quelques exemples.

Cependant, ces fonctions sont limitées au thème respectif et sont donc perdues lors du changement de thème. En revanche, un plugin est indépendant du thème et fonctionne idéalement avec n’importe quel thème.

Grâce à l’excellente extensibilité de WordPress, il n’y a presque aucune limite à votre imagination.
« Il existe un plugin pour ça » est donc un dicton populaire dans la communauté WordPress.

La gamme de plugins disponibles va des petits outils spécialisés qui n’effectuent qu’une seule tâche aux grands packages dont la portée dépasse même WordPress lui-même, comme WooCommerce par exemple, pour la mise en place de votre boutique en ligne, lui-même extensible !

Pourquoi créer votre propre plugin WordPress ?

Compte tenu du nombre énorme de plugins disponibles, il y a fort à parier que l’extension souhaitée existe déjà.
Et pourtant chaque entreprise a des besoins spécifiques, auxquels il faut répondre.
Cela arrive assez souvent, dès que vous dépassez le stade du simple site vitrine.

D’autres fois, des solutions existent, mais ne répondent que partiellement à votre besoin. Ou bien un plugin existe, mais il est beaucoup trop complexe pour votre besoin. Quand vous vous perdez dans les options du plugin, c’est souvent que des fonctionnalités ont été rajoutés au cours du temps, pour satisfaire des besoins très particuliers, dont vous n’avez que faire. Souvent le mieux est l’ennemi du bien.

Lors de la création d’un site web, nous regardons si des plugins existent, car cela représente une économie de temps et donc d’argent pour le client. Mais tous nos projets contiennent un plugin spécifiquement développé pour le projet, permettant de répondre aux besoins particuliers de nos clients par un développement sur mesure.

Au début, ce plugin WordPress embarque seulement des CSS ou du javascript supplémentaire, mais selon les projets, il peut vite dépasser le millier de lignes de code PHP.

L’avantage est que vous maîtrisez le code que vous utilisez. Et vous n’avez pas 50 plugins à mettre à jour…

Faut-il rajouter la fonctionnalité dans le plugin ou dans le thème enfant ?

Mettre en place un thème enfant est une bonne pratique :
Cela permet de conserver intact le thème principal (parent). Ainsi lorsque le thème original doit être mis à jour, vous ne risquez pas d’écraser votre code spécifique.

Si la fonctionnalité que vous avez ajouté est très spécifique au thème, alors on peut ajouter la fonctionnalité dans le fichier functions.php du thème enfant. On pourrait également modifier le modèle (template) de page du sous-thème pour intégrer le code directement.

Mais souvent il est préférable d’ajouter directement vos fonctionnalités spécifiques dans un plugin, ce qui permet de bien distinguer le fond (l’apparence, dont se charge le thème) de la forme (fonctionnalité, encapsulé dans un plugin).

Comment créer un plugin ?

Cela nous amène aux instructions étape par étape pour créer un plugin WordPress.

À titre d’exemple, créons un plugin simple. Ce plugin aura pour but d’intégrer le code javascript pour Google Analytics. Il existe quelques plugins de ce type, mais le but ici n’est pas de développer quelque chose de sensationnellement nouveau. Un plugin comme « Google site kit » permet de déporter (reproduire) toute les interfaces de Google Analytics, Search Console, Google Adsense, etc… directement dans le tableau de bord WordPress, mais c’est peut-être justement trop de fonctionnalités pour la plupart des sites, d’autant qu’il suffit de se connecter sur les interfaces dédiées. Est-il nécessaire d’alourdir inutilement votre site, et donc son temps de chargement ? Nous pensons que non.

Créer un dossier pour le plugin

Tous les plugins sont dans le dossier wp-content/plugins. Si un plugin n’est constitué que d’un seul fichier, celui-ci peut se trouver directement dans le répertoire du plugin. Cependant, la plupart des plugins sont constitués de plusieurs fichiers. Dans ce cas, un répertoire distinct doit être créé pour le plugin.

Le nom du dossier n’a pas d’importance. Le nom du plugin affiché dans WordPress peut être défini de manière totalement indépendante. Mais il est recommandé de nommer le répertoire de manière significative afin que le plugin puisse être identifié par le nom du répertoire.

Pour cet exemple de projet, j’appellerai simplement le dossier google-analytics.

Pour créer un nouveau dossier sur votre serveur Web, vous devez vous connecter au serveur via FTP . Pour ce faire, vous avez besoin d’un client FTP et des données d’accès FTP au serveur, que vous recevez de l’hébergeur.

Sinon, vous pouvez créer ce plugin sur votre serveur local, et ensuite le compresser puis le télécharger via l’interface dédiée (https://monsite.fr/wp-admin/plugin-install.php) :

Creer Plugin WordPress Upload

 

Créez le fichier principal du plugin

Comme vous le savez probablement, WordPress est basé sur le langage de programmation PHP. Les plugins doivent donc être programmés en PHP.

Tous les fichiers appartenant au plugin seront stockés dans le dossier que vous venez de créer. En plus des fichiers PHP qui contiennent le code du programme du plugin, il peut s’agir de toute une série d’autres fichiers.

Par exemple, la portée d’un plugin peut inclure des fichiers de traduction pour différentes langues, des fichiers CSS pour la mise en page, des fichiers JavaScript et des images.

Les plugins les plus élaborés peuvent contenir plusieurs centaines, voire quelques milliers de fichiers, qui sont alors généralement organisés dans un grand nombre de sous-répertoires. Pour notre exemple de plugin simple, nous n’aurons besoin que d’un seul fichier google-analytics.php. Dans le cas d’un plugin plus abouti, le code est réparti entre différents  fichiers, organisés par répertoires :

| index.php
| google-analytics.php
| 
+---css
| zeplugin.css
| 
+---fonts
| 
+---img
| zeplugin-logo.png
| 
+---includes
| ze-woo-utils.php
| 
+---js
| zeplugin.js
\ 

Chaque plugin nécessite un fichier principal, ou fichier de démarrage, ici google-analytics.php. Ce fichier est chargé par WordPress et le code est exécuté. Tous les autres fichiers requis doivent être chargés par l’intermédiaire de ce fichier.

Vous créez le fichier sur votre PC à l’aide d’un éditeur de texte et le transférez sur le serveur via FTP. Il est logique de créer simplement l’intégralité du plugin sur le PC de la même manière que sur le serveur. Si vous apportez des modifications, il vous suffit de télécharger à nouveau l’intégralité du dossier (ou les seuls fichiers modifiés).

Notez que les programmes de traitement de texte tels que Word ne sont pas des éditeurs de texte. De tels programmes stockent des informations supplémentaires dans le fichier en plus du texte visible, le rendant inutilisable pour WordPress. Un éditeur de texte recommandé est, par exemple, Notepad++ .

Un fichier PHP peut contenir à la fois du code PHP et HTML. Tout le code PHP doit apparaître entre les opérateurs <?php et ?>. Ce code sera traité par le serveur. Tout ce qui se trouve en dehors de ces opérateurs est traité comme du HTML et envoyé au navigateur sans traitement.

Ajoutez donc le texte au tout début de votre fichier <?php, puis quelques lignes vides et le texte à la fin ?>. Entre les deux vient le code lui-même. Si vous ajoutez un nouveau code, assurez-vous de l’ajouter avant l’opérateur de fin.

La seule information du plugin qui doit être présente dans l’en-tête du fichier principal est le nom du plugin.

<?php
/*
Plugin Name: Google Analytics
Description: Exemple de plugin simple pour ajouter Google Analytics à votre site
Version: 1.0
*/

Puisqu’un plugin est un script PHP comme les autres, le fichier est également accessible directement via l’URL du navigateur. Cela ne produirait que des erreurs car WordPress n’est pas chargé et les fonctions WordPress ne sont donc pas disponibles.

La première chose que vous devez faire dans n’importe quel plugin est de vérifier s’il est appelé par WordPress. Si ce n’est pas le cas, l’exécution s’arrêtera immédiatement.

Il existe différentes méthodes pour cette vérification. Le principe est le même partout. Il vérifie la présence de toute constante ou fonction définie par WordPress.

Une méthode courante que j’utilise toujours consiste à vérifier si la constante ABSPATH est définie. Au début de notre plugin – mais après le commentaire avec les informations du plugin – nous ajoutons le code suivant :

if ( ! defined( 'ABSPATH' ) ) {
  die;
}

Si vous téléchargez ce fichier sur votre serveur Web, votre plugin sera déjà affiché dans l’administration WordPress. Cependant, la présentation reste assez simple.

Silence is golden

(Le silence est d’or)

Index Of

Il peut arriver, lorsque le répertoire ne contiennent pas de page index.php ou index.html que le contenu d’un répertoire s’affiche.
Tout dépend de la configuration de votre serveur, sur lequel vous n’avez pas totalement le main quand il s’agit d’un hébergement mutualisé.
Les hackers utilisent d’ailleurs cette faille de sécurité pour afficher le contenu d’un répertoire, en faisant une simple recherche sur Google : « intitle:index of ».

Cela signifie que le fichier est trouvé et chargé par le serveur Web lors de l’accès à un répertoire. Cela empêche de manière fiable l’affichage du contenu du répertoire. Le fait que le fichier commence par un commentaire garantit qu’absolument rien n’est affiché.

Vous ne trouverez pas un tel fichier dans de nombreux répertoires de plugins – même pour les plugins bien connus avec un grand nombre d’installations actives. À mon avis, c’est une bonne contribution à la sécurité de WordPress et que de rajouter ce type de fichier index.php dans votre répertoire de plugin.

Vous pouvez simplement copier le fichier index.php suivant depuis wp-content/plugins.

<?php
// Silence is golden.

Code du plugin et explications :

<?php
/*
Plugin Name: Google Analytics
Description: Exemple de plugin simple pour ajouter Google Analytics à votre site
Version: 1.0
Author: Condorito
Author URI: http://condorito.fr
*/

// Exit if accessed directly
if( !defined('ABSPATH') ) {
    exit;
}

function sga_add_google_analytics() {
    ?>
    <!-- Global site tag (gtag.js) - Google Analytics -->
    <script async src="https://www.googletagmanager.com/gtag/js?id=YOUR_TRACKING_ID"></script>
    <script>
        window.dataLayer = window.dataLayer || [];
        function gtag(){dataLayer.push(arguments);}
        gtag('js', new Date());

        gtag('config', 'YOUR_TRACKING_ID');
    </script>
    <?php
}

add_action('wp_head', 'sga_add_google_analytics');
?>

Le code est très simple : On utilise ici le hook wp_head afin de rajouter (d’injecter) dans le header de notre page, le code Google Analytics, et de lui passer en paramètre l’identifiant de notre site web, tel que défini lors de la configuration de votre compte Google Analytics pour ce site.

Dans le code ci-dessus, il faudra tout de même modifier YOUR_TRACKING_ID par la véritable valeur de l’identifiant.

V2  : Deuxième version du plugin

Imaginons maintenant que vous souhaitez distribuer ce plugin ou en tout cas lui apporter un peu de souplesse.
Vous devez donc fournir une interface d’administration, afin de ne pas avoir à modifier la variable YOUR_TRACKING_ID dans le  code.

On fournira donc un champ texte, que l’administrateur n’aura qu’à renseigner.

Il nous faut donc créer un menu supplémentaire, que l’on rajoutera ici directement sous le menu pré-existant « Réglages » (« Settings » si l’interface de votre site est en Anglais) :

Google Analytics Plugin 1

Ce menu pointe vers une page d’administration dédiée, sur laquelle se trouve notre formulaire simple (contenant un champ texte et un bouton de validation).

Google Analytics Plugin 2

Lorsque de la soumission du formulaire, la valeur de mon identifiant google analytics sera sauvegardé dans la base de données, dans la table wp_options, prévue à cet effet. Vous n’avez pas à vous préoccuper des détails dans la mesure où nous nous appuyons sur l’ API WordPress Settings, qui nous facilite la tâche, si on accepte de respecter quelques règles bien sûr.

Cet identifiant est récupéré dans une variable, lors de l’injection de notre code javascript précédent, et le tour est joué.  On ajoute une condition, afin que le code javascript ne soit ajouté que si la variable existe.

Voici notre plugin mis à jour :

<?php
/*
Plugin Name: Google Analytics
Description: Exemple de plugin simple pour ajouter Google Analytics à votre site
Version: 1.0
Author: Condorito
Author URI: http://condorito.fr
*/

// Exit if accessed directly
if( !defined('ABSPATH') ) {
    exit;
}

// Add Google Analytics code to the head
function sga_add_google_analytics() {
    $tracking_id = get_option('sga_tracking_id');
    if (!empty($tracking_id)) {
        ?>
        <!-- Global site tag (gtag.js) - Google Analytics -->
        <script async src="https://www.googletagmanager.com/gtag/js?id=<?php echo esc_attr($tracking_id); ?>"></script>
        <script>
            window.dataLayer = window.dataLayer || [];
            function gtag(){dataLayer.push(arguments);}
            gtag('js', new Date());

            gtag('config', '<?php echo esc_attr($tracking_id); ?>');
        </script>
        <?php
    }
}
add_action('wp_head', 'sga_add_google_analytics');

// Register settings
function sga_register_settings() {
    register_setting('sga_settings_group', 'sga_tracking_id');
}
add_action('admin_init', 'sga_register_settings');

// Add settings page
function sga_settings_menu() {
    add_options_page(
        'Simple Google Analytics Settings',
        'Google Analytics',
        'manage_options',
        'sga-settings',
        'sga_settings_page'
    );
}
add_action('admin_menu', 'sga_settings_menu');

// Settings page callback
function sga_settings_page() {
    ?>
    <div class="wrap">
        <h1>Réglages Google Analytics</h1>
        <form method="post" action="options.php">
            <?php settings_fields('sga_settings_group'); ?>
            <?php do_settings_sections('sga_settings_group'); ?>
            <table class="form-table">
                <tr valign="top">
                    <th scope="row">Google Analytics Tracking ID</th>
                    <td><input type="text" name="sga_tracking_id" value="<?php echo esc_attr(get_option('sga_tracking_id')); ?>" /></td>
                </tr>
            </table>
            <?php submit_button(); ?>
        </form>
    </div>
    <?php
}
?>

Conclusion

WordPress se suffit à lui-même et peut être utilisé immédiatement. Mais quasiment toutes les  installations WordPress comporte des plugins : L’une des grandes forces de WordPress est son extensibilité.

Créer soi-même un plugin simple n’est pas une science. Tant que votre plugin ne modifie aucune donnée dans la base de données, vous ne pouvez rien casser.

Un plugin défectueux peut signifier que plus rien ne fonctionne, mais ce n’est pas une raison de paniquer. Si cela vous arrive, supprimez (ou renommez) simplement tout le répertoire dans lequel se trouve votre plugin sur le serveur et WordPress fonctionnera à nouveau.

Vous pouvez télécharger ce plugin créé pour illustrer cet article, si vous souhaitez l’étudier, l’utiliser, le modifier, le faire évoluer…

Si vous avez des besoins particuliers pour votre site web, ou votre boutique en ligne, nous sommes à votre disposition pour en discuter : Le développement WordPress/WooCommerce est notre spécialité.