2. Les templates

Sommaire

La hiérarchie de template

Wordpress utilise une convention de nommage particulière pour attribuer des templates (fichiers PHP) aux différentes pages du site. Cette convention est représentée dans le schéma suivant :

Hiérarchie de template
Consulter la version interactive

Les cases grises correspondent à des types de page, les trois autres couleurs sont des noms de templates.
On distingue 6 grandes familles de contenus :

  • Les archives : ce sont les pages qui affichent plusieurs contenus.
  • Les singles : ce sont les pages qui affichent un seul contenu.
  • La page d'accueil : selon votre configuration, cette page peut afficher une page statique ou vos derniers articles
  • Le blog : c'est la page qui a été définie comme "page des articles". Elle affiche les derniers articles publiés
  • Erreur 404 : c'est la page qui s'affiche quand le contenu demandé est introuvable
  • Résultats de recherche : affiche les résultats d'une recherche effectuée via un formulaire interne

Pour chaque page, Wordpress va automatiquement chercher le template correspondant en partant du plus précis (le plus à gauche dans le schéma). S'il ne trouve pas le fichier, il cherchera alors le suivant et ainsi de suite jusqu'au fichier index.php qui sera utilisé par défaut pour tous vos contenus.

Exemple : page d'un article

Il s'agit d'un contenu seul (single), nous regarderons donc la deuxième ligne Singular Page.
Il s'agit d'un article (post) et non d'une page. Nous sommes donc dans le cas Single Post Page.
Enfin nous avons trois options :

  • Attachment Post : page d'un média
  • Custom Post : page d'un type de contenu personnalisé, par exemple un Film. Nous y reviendrons plus tard
  • Blog Post : page d'un article

Nous sommes donc dans le dernier cas, celui du Blog Post.

Le premier choix proposé en orange $custom.php est un template variable. Il est utilisé dans le cas où l'article possède un template personnalisé. Nous y reviendrons plus tard.
Comme nous n'avons pas de template personnalisé, nous passons au suivant : le fichier à créer pour la page d'un article est donc single-post.php.

Lorsque nous afficherons la page d'un article Wordpress utilisera donc automatiquement le fichier single-post.php. Si ce dernier n'existe pas, Wordpress cherchera le fichier single.php et ainsi de suite jusqu'à retomber sur index.php.

La structure d'un template

Dans la quasi-totalité des cas, vous aurez un header et un footer identique sur chaque page de votre site.
Afin de ne pas avoir à répéter le code HTML dans chaque template, nous allons créer deux fichiers :

  • header.php
  • footer.php

Le header contient la partie haute du site : balises meta, title, ouverture des balises body et html, feuilles de style, etc.
Nous y appellerons systématiquement la fonction wp_head() juste avant la fermeture de la balise <head> pour inclure automatiquement les scripts de Wordpress.

La fonction body_class() appelée à l'intérieur de la balise body permet d'y ajouter automatiquement des classes prédéfinies par Wordpress qui nous seront utiles par la suite.

header.php

Le footer contient la partie basse du site : fermeture des balises body et html, inclusions des scripts, etc.
Nous y appellerons systématiquement la fonction wp_footer() juste avant la fermeture de la balise <body> pour inclure automatiquement les scripts de Wordpress.

footer.php

Dans tous vos templates, vous devrez appeler ces deux fichiers en utilisant les fonctions get_header() et get_footer().

Vous pouvez créer plusieurs templates de header et de footer en les nommant via l'ajout d'un suffixe.
Par exemple, vous pouvez créer un header alternatif dans un fichier header-alt.php et l'appeler en passant son nom en paramètre : get_header('alt').

La boucle

La boucle est le composant principal d'un template. C'est elle qui va vous permettre d'afficher le contenu de votre template.
Dans une page d'archive, la boucle affichera plusieurs contenus. Dans une page de contenu seul, elle n'affichera que le contenu demandé.

L'instruction while (have_posts()) : exécute la boucle.
L'instruction the_post(); initialise ensuite le contenu à chaque itération.
Enfin, endwhile; indique la fin de la boucle.
Tout le code situé entre le début et la fin de la boucle sera exécuté à chaque itération.

À l'intérieur de cette boucle, nous récupérerons les données du contenu à l'aide de fonctions :

  • the_title() pour afficher le titre
  • the_content() pour afficher le contenu
  • the_excerpt() pour afficher l'extrait
  • the_author() pour afficher le nom de l'auteur
  • the_permalink() pour afficher l'URL de la page

Voici un exemple de template affichant le titre du contenu, le nom de l'auteur et son contenu.

Les différents templates

Les archives

Les archives sont des listes de contenus. Il peut s'agir des contenus d'une taxonomie (catégorie ou tag), d'un auteur ou d'une date.
Le fichier archive.php définit le template d'archive par défaut pour tous les contenus.
Les archives sont paginées. Chaque page contiendra le nombre de contenus définis dans les réglages de lecture.
Pour afficher les liens de pagination, nous utiliserons la fonction the_posts_pagination().

La fonction de pagination doit être insérée après la boucle.

Les singles

Les singles affichent un seul contenu. Il peut s'agir d'un article, d'un contenu personnalisé, d'une page ou d'un média (attachment)
Le fichier single.php définit le template par défaut pour tous les articles, contenus personnalisés et médias.
Le fichier page.php définit le template par défaut pour toutes les pages.
Le fichier singular.php définit le template par défaut pour tous les singles confondus.
Vous pouvez aussi créer un fichier spécifique à un type de contenu en le nommant single-{slug}.php. Pour un article, le fichier est donc nommé single-post.php.

Les templates singles utilisent aussi la boucle, même s'ils n'affichent qu'un seul contenu.
Le balisage sera donc identique à celui d'une archive, mais la pagination ne sera pas pertinente.

Les modèles de pages

Il est possible de créer des modèles que vous affecterez manuellement à vos pages ou à vos articles.
Pour cela il suffit de créer un fichier et d'y indiquer le nom du modèle en commentaire dans le paramètre Template Name.
Il est d'usage de placer vos templates personnalisés dans un sous-répertoire templates.

templates/my-template.php

Par défaut, les modèles ne peuvent être attribués qu'à des pages.
Pour permettre l'attribution d'un modèle à un autre type de contenu, vous devez préciser les différents types dans le paramètre Template Post Type.

templates/my-template.php
Sélecteur de modèle
Votre modèle est disponible dans la section "Attributs de page"

Veillez à bien respecter la nomenclature, comme vous l'avez fait précédemment dans le fichier style.css.

Lorsque vous chargerez une page à laquelle vous avez attribué un modèle personnalisé, ce dernier template sera chargé en priorité par rapport à celui par défaut.