• 15 heures
  • Facile

Ce cours est visible gratuitement en ligne.

Ce cours existe en livre papier.

course.header.alt.is_certifying

Vous pouvez être accompagné et mentoré par un professeur particulier par visioconférence sur ce cours.

J'ai tout compris !

Mis à jour le 13/03/2018

Créer des plugins

Connectez-vous ou inscrivez-vous gratuitement pour bénéficier de toutes les fonctionnalités de ce cours !

Après avoir vu thèmes, nous aborderons ici le second point majeur de WordPress : les plugins. Le support de ces modules additionnels a pour objectif de vous offrir un moyen sans limite de rajouter de nouvelles fonctionnalités à WordPress, qu'elles soient spécifiques à votre site ou bien réutilisables les autres. Grâce aux plugins, vous pourrez ajouter tout ce dont vous avez besoin. Après avoir abordé les principes de la création d'un plugin sous WordPress, nous suivrons pas à pas les étapes de création à travers une étude de cas.

Déclarer le plugin

De même que les thèmes, les plugins ont une structure de base très simple. Seul un minimum d'actions doit être exécuté pour pouvoir les déclarer, et c'est ensuite à vous d'y rajouter des fonctions pour compléter leur structure.

Les plugins doivent tous être situés dans le dossier wp-content/plugins, et peuvent être constitués d'un ou plusieurs fichiers.

Tout d'abord, créons un dossier zero dans lequel seront placés les fichiers PHP du plugin, ainsi qu'un premier fichier zero.php.

Pour que le plugin soit reconnu par WordPress, il faut nécessairement déclarer au moins son nom dans le fichier principal. Nous faisons cela via un commentaire au début du fichier.

<?php
/*
Plugin Name: Nom du Plugin
*/

Si vous souhaitez donner plus d'informations à propos de votre plugin, notamment si vous souhaitez le distribuer, il existe d'autres informations qu'il est recommandé d'indiquer à la suite du nom.

  • Plugin URI : l'adresse du site de votre plugin décrivant son fonctionnement et donnant des informations complémentaires ;

  • Description : un paragraphe de description du plugin, affiché en parcourant la liste des plugins ;

  • Version : la version du plugin ;

  • Author : votre nom ;

  • Author URI : l'adresse de votre site ;

  • License : un nom de licence pour le code du plugin.

Nous pouvons donc avoir un en-tête comme celui-ci :

<?php
/*
Plugin Name: Zero plugin
Plugin URI: http://zero-plugin.com
Description: Un plugin d'introduction pour le développement sous WordPress
Version: 0.1
Author: Midnight Falcon
Author URI: http://votre-site.com
License: GPL2
*/

Votre plugin est maintenant reconnu par WordPress ! Pour le vérifier, allez dans l'interface d'administration. Vous devez le voir apparaître dans la liste des extensions. Si c'est le cas, activez-le (voir la figure suivante) !

Le plugin est reconnu par WordPress
Le plugin est reconnu par WordPress

Nos premières fonctions

Écrivons maintenant notre première fonction dans ce plugin. Tout ce qui est déclaré dans le plugin peut être appelé depuis n’importe quel autre endroit du code, que ce soit depuis un thème ou un autre plugin. Il est donc tout à fait possible pour un plugin d’utiliser les fonctions d’un autre plugin, si celui-ci a été activé sur votre site.

Malgré cela, il est préférable d’utiliser au maximum le système modulaire de WordPress pour appeler vos fonctions, comme nous l’avons fait plus tôt avec les filtres et la fonction add_filter(). De cette façon, il n’est pas nécessaire d’appeler les fonctions du plugin en dehors de celui-ci, ce qui limite les dépendances et les besoins de créer des appels depuis l’extérieur. En particulier, utiliser les filtres vous permet de rendre votre plugin compatible avec n’importe quel thème de votre site, puisqu’il enregistra de lui-même les actions qu’il doit effectuer.

Rajouter un filtre simple

Notre première tâche sera de modifier sur toutes les pages l’attribut<title>pour indiquer que le plugin est activé. Pour ce faire, le filtre wp_title, appelé avec la fonction the_title(), est idéal pour nous.

<?php
add_filter('wp_title', 'zero_modify_page_title', 20) ;
function zero_modify_page_title($title) {
    return $title . ' | Avec le plugin des zéros !' ;
}

Dorénavant, tant que le plugin sera activé, toutes les pages verront leur titre mis à jour comme écrit dans la fonction. En allant par exemple sur une page intitulée « À propos de nous », nous trouvons le code HTML suivant :

<head>
    <!-- ... -->
    <title>À propos de nous | Wordpress pour les zéros | Avec le plugin des zéros !</title>

Utiliser une structure objet

Afin d’utiliser toute la puissance de PHP dans notre plugin, nous allons structurer notre plugin à l’aide de classes. Ce n’est bien entendu pas obligatoire, un plugin peut tout à fait fonctionner avec des fonctions dans l’espace global, mais la programmation objet permet de mieux organiser une application de grande ampleur, nous allons donc tout de suite restructurer le code de notre plugin en ce sens.

Nous créons donc dans le fichier zero.php une classe Zero_Plugin avec pour méthode le filtre que nous avions utilisé précédemment.

<?php
class Zero_Plugin
{
    public function __construct()
    {
        add_filter('wp_title', array($this, 'modify_page_title'), 20) ;
    }

    public function modify_page_title($title)
    {
        return $title . ' | Avec le plugin des zéros !' ;
    }
}

new Zero_Plugin();

Comme vous le voyez, l’utilisation de la fonction add_filter() a été légèrement modifiée pour la spécification de la fonction de rappel. Étant donné que nous avons déplacé la fonction modify_page_title() dans un objet, il faut aussi fournir l’instance de l’objet pour pouvoir appeler la fonction ! Ceci se fait en passant comme argument un tableau avec l’instance de l’objet à utiliser et le nom de la méthode de classe à appeler.

Une structure multifichiers

Toujours dans le but de structurer votre plugin, vous aurez probablement besoin d’écrire du code dans différents fichiers, qui contiendront par exemple différentes classes si vous choisissez d’utiliser des objets.

Dans une application PHP, l’utilisation de plusieurs fichiers passe par l’inclusion de ceux-ci au travers d’une directive include ou include_once. Au sein de WordPress, seul le fichier principal d’un plugin activé (celui qui déclare le nom du plugin) est inclus automatiquement au chargement de l’application. Tous les autres fichiers doivent donc être inclus par le développeur s’il désire les utiliser. Dans le cas contraire, les éventuelles classes et méthodes contenues ne seront pas utilisables.

La tâche de notre fichier zero.php sera donc plus particulièrement de charger les fichiers nécessaires au chargement du plugin.
Pour illustrer cela, nous allons une dernière fois réorganiser la structure de notre code : une nouvelle classe Zero_Page_Title, dans un fichier pagetitle.php, contiendra le filtre de titre que nous avons créé et la classe Zero_Plugin se chargera d’instancier Zero_Page_Title (et toute autre classe que nous pourrons ajouter ultérieurement). De cette façon, nous avons un point d’entrée qui prend en charge les créations d’objets, eux-mêmes effectuant des traitements spécifiques, ce qui facilitera l’ajout de fonctionnalités.

Le code final des deux classes est donc le suivant.

<?php
class Zero_Plugin
{
    public function __construct()
    {
        include_once plugin_dir_path( __FILE__ ).'/page_title.php';
        new Zero_Page_Title();
    }
}
<?php
class Zero_Page_Title
{
    public function __construct()
    {
        add_filter('wp_title', array($this, 'modify_page_title'), 20) ;
    }

    public function modify_page_title($title)
    {
        return $title . ' | Avec le plugin des zéros !' ;
    }
}

Un plugin complet

Il est maintenant temps d’aller plus loin dans la création de plugin en exploitant au maximum les possibilités offertes par WordPress. Nous allons pouvoir commencer à rentrer dans les sujets avancés de la création de plugin autour d’un objectif précis : la mise en place d’un plugin de newsletter, que nous créerons au fil des chapitres suivants.

Les objectifs

Le plugin que nous allons mettre en place est relativement simple. Il consiste à proposer aux visiteurs de s’inscrire sur le site en fournissant leur adresse email afin de recevoir une newsletter concernant l’actualité du site.

Plusieurs sujets entrent en œuvre, à commencer par la création d’un widget, affiché sur toutes les pages, dans le but de récupérer les adresses email. La base de données devra comporter une table supplémentaire afin de stocker la liste des adresses à qui il faut envoyer la newsletter. Enfin, l’interface d’administration permettra à l’administrateur de définir le contenu de cet email, son objet, l’adresse email de l’expéditeur et un bouton pour déclencher l’envoi.

Le chantier couvrira donc les aspects majeurs de WordPress, il est temps de s'y attaquer sans plus tarder !

La classe Zero_Newsletter

Afin de garder une structure cohérente dans notre module, nos allons créer une nouvelle classe Zero_Newsletter qui se chargera de tout le code concernant la fonctionnalité de newsletter. Plaçons-la dans un fichier newsletter.php, qui sera pour l’instant assez simple.

<?php
class Zero_Newsletter
{
    public function __construct()
    {
    }
}

N’oubliez pas de modifier le constructeur de la classe Zero_Plugin pour instancier un nouvel objet Zero_Newsletter.

<?php
class Zero_Plugin
{
  public function __construct()
  {
    //...
    include_once plugin_dir_path( __FILE__ ).'/newsletter.php';
    new Zero_Newsletter();

    //...
  • Tous les plugins sont placés dans le répertoire wp-content/plugins.

  • Le plugin est déclaré avec un commentaire dans l'en-tête du fichier principal.

  • Un plugin doit être de préférence découpé en fichiers suivant les fonctionnalités ajoutées.

Exemple de certificat de réussite
Exemple de certificat de réussite