Comment débuter le développement d’une extension WordPress

Une extension est constituée d'un ou plusieurs fichiers placés dans un dossier au nom unique, situé sous www\votresite\wp-content\plugins.

Le code principal de l'extension sera placé dans un fichier .php qui contient un entête standard donnant de l'information sur l'extension. Un exemple de cet entête est présenté plus bas. Si plus d'un fichier .php sont présents dans le dossier, les autres fichiers auront un entête différent afin de ne pas induire WordPress en erreur.

Bien que ce ne soit pas obligatoire, il est conseillé de créer une classe pour contenir le code de votre extension.

Cet article présente les étapes à suivre pour réussir le développement de votre extension.

▼Publicité

Note : il existe une foule d'approches pour développer des extensions. Certaines sont meilleures que d'autres. Certaines respectent mieux les principes de la programmation objet que d'autres. Certaines correspondent mieux aux préférences individuelles d'un programmeur ou d'un autre.

L'approche qui est présentée ici utilise un seul fichier .php afin de permettre aux débutants de développer rapidement une extension pas trop complexe tout en respectant les bonnes pratiques WordPress.

Nom de l'extension

Commencez par déterminer le nom de votre extension. Vous devrez créer un dossier au nom unique basé sur ce nom.

Par exemple, pour créer une extension permettant de gérer une liste d'employés, vous pourriez nommer l'extension Gestion employés.

Dossier de l'extension

Le nom du dossier, pour être unique, devra débuter par un préfixe qui est propre à votre extension. Il pourrait s'agir de votre nom ou du nom de votre entreprise ou de votre propre nom, comme par exemple annie-gestion-employes.

Effectuez une recherche sur https://wordpress.org/plugins/ pour vérifier si votre nom de dossier est unique dans le monde des extensions WordPress.

Lorsque vous aurez un nom unique, créez le dossier de l'extension sous www\votresite\wp-content\plugins.

Fichier de l'extension

Dans ce dossier, créez un fichier PHP au format UTF-8 sans BOM dont le nom ressemble au nom de l'extension, sans espaces ni accents. Ce fichier sera le fichier principal de votre extension. Dans notre exemple, le fichier pourrait s'appeler gestion-employes.php. Notez que selon les normes WordPress, le nom d'un fichier doit être entièrement en lettres minuscules et les mots doivent être séparés par des traits d'union.

Votre fichier principal doit absolument débuter par l'entête standard suivant. Notez que la ligne Plugin Name est obligatoire pour que WordPress affiche votre extension dans la page des extensions du tableau de bord. Ce que vous écrirez comme Plugin Name correspond à ce qui sera affiché dans le tableau de bord. Vous pouvez utiliser des espaces et des accents.

Note : si vous n'avez pas d'URL où l'extension peut être téléchargée, vous pouvez omettre la ligne Plugin URI. Il en va de même pour les autres lignes pour lesquelles vous n'avez pas d'information pertinente.

Remarquez que dans l'entête standard, il ne doit pas y avoir d'espace avant les deux points (:).

WordPress (PHP)

<?php

/**

 * Plugin Name: Mon Extension

 * Plugin URI: http://url_pour_telecharger_extension

 * Text Domain: monprefixe-mon-extension

 * Description: 

 * Version: 1.0

 * Author: 

 * Author URI: 

 * License: GPL2

 */

?>

Empêcher l'accès direct au fichier de l'extension

Pour exécuter le code de l'extension, vous devez passer par l'interface de WordPress, c'est-à-dire que le code des différentes méthodes sera exécuté soit en cliquant sur une option de menu que vous aurez ajoutée dans le tableau de bord, soit en utilisant un « shortcode », soit en utilisant d'autres fonctionnalités que vous aurez codées. 

Si vous tentez d'appeler le fichier de l'extension directement dans l'URL (ex : http://mondomaine.com/wp-content/plugins/annie-gestion-employes/gestion-employes.php), les fonctions de base de WordPress n'auront pas été chargées et vous obtiendrez une erreur du genre :

Fatal error: Call to undefined function ... in C:\Program Files (x86)\EasyPHP-DevServer-16.1\eds-www\monsitewordpress\wp-content\plugins\annie-gestion-employes\gestion-employes.php on line 60

Une telle erreur, si elle était affichée sur un site en ligne, causerait une faille de type full path disclosure.

Pour éviter ceci, si suffit d'ajouter le code suivant juste sous l'entête standard.

WordPress (PHP)

// Empêcher l'accès direct à ce fichier

if ( ! defined ( 'ABSPATH' ) ) {

    // note : impossible de localiser cette chaîne puisque WordPress n'est pas chargé

    echo 'Vous ne pouvez pas appeler directement ce fichier. Veuillez passer par le tableau de bord.';

    exit;

}

Définition de constantes

Parfois, une extension a besoin de travailler avec des constantes. Ce sera le cas, par exemple, si vous souhaitez gérer la version de l'extension afin d'activer automatiquement des modifications à la base de données lorsqu'une nouvelle version est installée.

La définition de ces constantes sera faite sous le code qui empêche l'accès direct au fichier de l'extension, juste avant la définition de la classe de l'extension.

Ex :

WordPress (PHP)

/**

 * Constante pour la version de l'extension.

 *

 * @var string MONPREFIXE_VERSION Numéro de version de l'extension.

 */

if ( ! defined( 'MONPREFIXE_VERSION' ) ) {

    define( 'MONPREFIXE_VERSION', '1.0.0' );

}

Classe de l'extension

Vous pouvez maintenant créer la classe de votre extension. Notez qu'un squelette de cette classe vous est présenté dans l'article « Squelette de la classe d’une extension WordPress ».

Puisque le nom de la classe doit être unique, il est suggéré de lui donner un nom semblable à celui du dossier. Le nom de la classe doit lui aussi respecter les normes WordPress, c'est-à-dire utiliser la casse Pascal (majuscule en début de chaque mot, incluant le premier mot) et comprendre une barre de soulignement entre les mots (ex : class Annie_Mes_Employes).

WordPress (PHP)

/**

 * Extension qui permet de ... (ne pas oublier le point à la fin de la description).

 *

 * Description longue.

 */

class Monprefixe_Mon_Extension {

    ...

}

Instanciation d'un objet de cette classe

Vous avez créé une classe, c'est bien, mais encore faut-il qu'un objet de cette classe soit instancié.

L'instanciation peut avoir lieu AVANT ou APRÈS la définition de la classe (et non à l'intérieur de la classe). L'instanciation sera donc effectuée dans le même fichier que la définition de la classe.

Mais attention : si l'objet est instancié avant la classe et que votre classe utilise des constantes, l'instanciation de l'objet devra être faite après la déclaration de ces constantes.

Ex :

WordPress (PHP)

$monprefixe_mon_extension = new Monprefixe_Mon_Extension();

Certaines classes définissent une méthode statique nommée init() pour effectuer du travail d'initialisation. À ce moment, la méthode doit être appelée de façon statique en la faisant précéder du nom de la classe puis de deux fois deux points (::). On effectuera cet appel AVANT ou APRÈS la définition de la classe.

Ex :

WordPress (PHP)

Monprefixe_Mon_Extension :: init();

Pour plus d'information

« Best practices ». WordPress Developer. https://developer.wordpress.org/plugins/the-basics/best-practices/

« wp_default_plugin ». github.https://github.com/chibani/wp_default_plugin/blob/master/wp_default_plugin.php

« Foire aux questions sur la GNU GPL version 2 ». Le système d'exploitation GNU.http://www.gnu.org/licenses/old-licenses/gpl-2.0-faq.html

« What the GPL Licence used by WordPress Means ». WP Mayor.http://www.wpmayor.com/articles/what-the-gpl-licence-used-by-wordpress-means/

« Constructors and Destructors ». PHP.NET. http://php.net/manual/en/language.oop5.decon.php

« Create WordPress Plugins with OOP Techniques ». Net Tuts Plus. http://net.tutsplus.com/tutorials/wordpress/create-wordpress-plugins-with-oop-techniques/

« Rethinking Object-Oriented WordPress Plugins ». X + 3. http://xplus3.net/2011/03/08/rethinking-object-oriented-wordpress-plugins/

« Creating Tables with Plugins ». Codex WordPress. http://codex.wordpress.org/Creating_Tables_with_Plugins

« Custom Fields ». Codex WordPress. http://codex.wordpress.org/Custom_Fields

« Administration Menus ». Codex WordPress. https://codex.wordpress.org/Administration_Menus

« Function Reference/add submenu page ». Codex WordPress. https://codex.wordpress.org/Function_Reference/add_submenu_page

« Créer un plugin wordpress ». webotheque. http://www.webotheque.fr/glossaire-web/creer-plugin-wordpress.php

« Different ways of instantiating WordPress plugins ». Jesper van Engelen. http://jespervanengelen.com/different-ways-of-instantiating-wordpress-plugins/

« Best way to initiate a class in a WP plugin? ». WordPress Development. http://wordpress.stackexchange.com/questions/70055/best-way-to-initiate-a-class-in-a-wp-plugin

« Test in isolation ». WordPress Development. http://wordpress.stackexchange.com/questions/164121/testing-hooks-callback/164138#164138

« Initializing Singleton Classes used in WordPress Plugins ». HardcoreWP. http://hardcorewp.com/2013/initializing-singleton-classes-used-in-wordpress-plugins/

« Plugin Base Skeleton ». Mario Peshev on WordPress Development. http://devwp.eu/plugin-base-skeleton/

« WordPress Plugin Skeleton ». PhpTrends. http://phptrends.com/dig_in/WordPress-Plugin-Skeleton

« The WordPress Plugin Boilerplate 3.0.0 ». Tom McFarlin. https://tommcfarlin.com/wordpress-plugin-boilerplate-3/

« WordPress custom database table example (full) ». http://mac-blog.org.ua/. http://mac-blog.org.ua/wordpress-custom-database-table-example-full/

« Loading Scripts Correctly in the WordPress Admin ». Pippins Plugins. https://pippinsplugins.com/loading-scripts-correctly-in-the-wordpress-admin/

Merci de partager ! Share on FacebookTweet about this on TwitterShare on Google+Share on LinkedInPin on PinterestShare on StumbleUponEmail this to someone
Catégories