Chapitre 10 sur 20

Créer des templates et plugins

Laisser un commentaire

Les templates de page permettent de proposer depuis le back-office plusieurs choix de layout pour une page. Les plugins offrent une abstraction afin de placer de la logique dans un conteneur réutilisable et indépendant du thème.

Les templates et les plugins ont pour point commun de commencer par un commentaire spécial, indiquant à WordPress leur rôle particulier.

Templates de page

Lorsque vous créez un thème, vous créez des templates plus ou moins génériques : index.php, page.php, category.php, taxonomy.php, front-page.php, page-contact.php. Chacun de ces templates s’applique automatiquement en fonction du contenu et de sa position dans la template hierarchy.

La hiérarchie de templates WordPress
Schéma de la hiérarchie des templates WordPress

Cependant, les templates de page permettent de prendre le dessus sur l’application automatique en fonction de la hiérarchie car c’est directement l’utilisateur qui désigne le template en back-office.

Un template de page est structuré exactement de la même manière que tous les autres templates. La seule différence est qu’il commence par un tag indiquant qu’il s’agit d’un template.

<?php /* Template Name: Mon super template */ ?>

Si votre thème possède au moins un template commençant par ce commentaire, vous aurez dans le back-office des pages un menu déroulant permettant de choisir un template spécifique ou de laisser le comportement par défaut.

Naming et organisation

On évitera de nommer le template en le préfixant par page- (car WP penserait qu’il s’agit d’un template spécialisé) et on evitera également les noms réservés.

WordPress reconnaît le répertoire page-templates. Aussi, c’est une bonne pratique de regrouper les templates de page dans ce dossier. Vous vous y retrouverez plus facilement.

Les plugins

Nous l’avons mentionné dans le chapitre sur l’organisation du code, lorsque l’on considère WP comme un framework, séparer l’aspect logique du thème n’a pas forcément une grande utilité.

Il peut cependant arriver que l’on veille placer de la logique dans un plugin. Dans sa forme la plus simple, un plugin est un fichier PHP contenant une en-tête, tout comme les templates, et placé dans le répertoire plugins/ de wp-content/.

<?php /* Plugin Name: Mon super plugin */ ?>

Vous avez là un plugin, qui ne fait et ne sert à rien, mais qui est déjà visible dans l’admin de WP et qu’il est possible d’activer et de désactiver.

Vous pouvez spécifier bien d’autres informations dans le header. Par ailleurs, afin de bien organiser le code d’un plugin non trivial, il est courant de séparer ce dernier en plusieurs fichiers, lesquels sont regroupés dans un dossier.

Lorsque le plugin est organisé dans un dossier, le nom du plugin est aussi le nom du dossier et du fichier d’entrée.

plugins/
  plugin-name/
    plugin-name.php
    …

L’autre fichier possédant un nom spécifique est uninstall.php, lequel sera exécuté lors de la suppression du plugin. Ce n’est pas une obligation de le créer, mais s’il existe, il sera exécuté lors de la suppression du plugin. Pour tout le reste, vous êtes le maître à bord !

Les hooks des plugins

Mis à part le uninstall.php, vous disposez de plusieurs hooks permettant de gérer le cycle de vie du plugin :

Les hooks prennent en premier paramètre le nom du plugin, incluant le path. Si vous respectez les conventions ne nommage précédemment expliquées, vous pouvez tout simplement utiliser la constante magique __FILE__.

register_activation_hook(__FILE__, function () {
    …
});

Les plugins ne sont ni plus ni moins que des scripts PHP, vous disposez de toutes les fonctions et méthodes de PHP et WordPress et vous devez faire attention aux collisions de naming (utilisez les namespaces). Il existe un boilerplate de plugin que vous pouvez utiliser pour accélérer le démarrage.

Dans le prochain chapitre, nous allons découvrir comment créer des champs personnalisés afin de créer des mises en page complexes.

Commentaires

Rejoignez la discussion !

Vous pouvez utiliser Markdown pour les liens [ancre de lien](url), la mise en *italique* et en **gras**. Enfin pour le code, vous pouvez utiliser la syntaxe `inline` et la syntaxe bloc

```
ceci est un bloc
de code
```