WordPress : faire un lien depuis home.php vers un autre template

hierarchie-des-templates-wordpress

Cet article répond à la question existentielle suivante : comment faire un lien depuis le template home.php qui affiche ma page d’accueil personnalisée vers une autre « rubrique » du site chargée d’afficher les articles dans l’ordre antéchronologique. En gros, l’idée est de créer une section qui fera office d’archive pour le site ou encore d’afficher les articles comme s’il s’agissait d’un blog, quoi.

Quelle structure ?

Pour faire simple, mon nouveau thème WordPress est composé principalement d’un template pour la page d’accueil et d’un autre pour les catégories auxquelles on peut accéder par le menus situé dans le header.

home.php

La page d’accueil est gérée par le fichier home.php. Il est composé de deux boucles : la première affiche soit le dernier article publié soit un « Sticky Post » tandis que la seconde affiche les trois derniers articles issus de la même rubrique que l’article affiché dans la première boucle.

En bas de cette page, un lien permet au visiteur d’afficher tous les billets de la même catégorie pour proposer du contenu similaire au dernier billet publié. C’est à la suite de ce lien que j’aimerai ajouter un lien vers cette nouvelle « rubrique » Archives.

index.php

Le template pour les rubriques n’est ni plus ni moins que le template index.php qui prend le relais de home.php selon la hiérarchie des templates.

Les sidebars

Ces différents modèles sont chargés d’appeler la barre latérale qui accueille, quant à elle : un moteur de recherche, des articles aléatoires, de la publicité, etc.

Les menus

Le menu principal situé dans le header mène vers les têtes de rubriques du site, tandis que le menu secondaire situé dans le footer permet d’accéder à des pages spécifiques : à propos, contact, blogroll (oui, ça existe encore), lien vers le thème WordPress Basics, etc.

Des archives ?

C’est déjà bien, mais il manquait la possibilité d’afficher la totalité des articles dans l’ordre de leur parution indépendamment de leur rubrique. Comme je le disais sur Twitter, c’est tout bête, mais j’ai quand même passé un peu de temps pour trouver une solution satisfaisante. J’ai d’abord cherché du côté d’une catégorie « catch all » pour les attraper toutes. (Il y aurait bien une solution basée sur un hack de l’argument post__in qui renvoie tous les articles lorsqu’il est vide, mais saymal 🙂

1. Créer le template archives.php

Revenons à notre section pour les archives du blog. Pour éviter de revoir de fond en comble la structure du site, j’ai décidé de créer un nouveau template archives.php en précisant dans l’en-tête que je veux qu’il soit compris comme un Modèle de page accessible lors de la création d’une pages depuis l’administration de WordPress. En cherchant sur Google, je suis tombé sur un billet concernant une astuce pour afficher une page autonome, parue sur — je vous le donne Emile : ici même ^^

Bref, pour cela, il suffit d’ajouter le commentaire suivant à l’intérieur des balises PHP :

<?php
/* Template Name: Archives */
...
...
?>
Création d'un Modèle de page

J’ai créé le fichier archives.php à partir d’index.php présent dans le thème parent, je l’ai renommé et placé dans le thème enfant.

 2. Créer une page pour les archives

La deuxième opération consiste à créer une page vide intitulée « Archive »s (slug archives) et de choisir le Modèle de page « Archives » dans le menu déroulant à droite.

3. Créer un lien ou ajouter la page dans le menu

Dernière opération : la création d’un lien menant vers cette toute nouvelle section d’archives. Pour ce faire, il y a plusieurs possibilités : ajouter la page « Archives » dans un menu ou créer un lien manuel vers cette page.

4. Tester

La peinture est encore fraîche, mais vous pouvez tester cette nouveauté ici-même depuis le bas de la page d’accueil ou dans le menu présent dans le footer (bon, je suis sympa, voici le lien vers cette page d’archives) Je me tâte pour ajouter le lien dans le menu principal au cas où l’affichage des articles à la manière d’un blog est jugé indispensable ou pas.

Je précise qu’il est très certainement possible d’arriver à ce résultat en s’y prenant autrement,  mais j’avais envie de garder la structure de mon thème basé sur WordPress Basics en faisant le moins de modifications structurelles possibles et sans utiliser d’extension (point trop n’en faut).