Comment distinguer les catégories parents et enfants ?
Par défaut, wordpress ne fait pas clairement la distinction entre les catégories principales et secondaires. On retrouve un seul fichier category.php pour l’ensemble des niveaux de catégories du site. En principe, chacun procède à la hiérarchie de ses catégories, notamment via l’interface d’administration des catégories dans wordpress.
Une fois sa hiérarchie en place, on se rend sur une page de sous catégorie et on retrouve les classes par défaut « archive » et « category« .
Dans une catégorie parente, le body contiendra aussi les mêmes classes par défaut, sans distinction de niveau.
Créer un fichier pour une catégorie spécifique
Afin de créer une page de catégorie radicalement différente d’une autre,, on peut par exemple créer un template nommé ‘category-‘ suivi du nom de notre catégorie. Au clic sur un lien vers cette catégorie, WordPress ira alors chercher en premier lieu le fichier correspondant.
Sinon, on peut décider de créer un fichier spécifique pour toutes les catégories parentes. On crée donc un fichier nommé par exemple category-custom-template ( nom choisi au hasard).
La nouvelle catégorie parente doit afficher toutes les sous catégories. Voici un exemple de code
On appelle nos catégories enfants, et on affiche par exemple les titres et les descriptions. Pour l’image, j’utilise ici un champ image crée grâce au plugin ACF.
Maintenant, puisqu’on ne compte pas créer de catégories appelées « custom template » dans le backoffice, mais se servir de ce fichier pour afficher toutes les catégories parentes, comment faire pour ensuite distinguer les deux niveaux de catégories, parent et enfant ?
La fonction magique
On a la possibilité d’inclure un nouveau fichier grâce au filtre add_filter( ‘template_include’,… ) qui va forcer wordpress à utiliser notre nouveau template. Dans l’exemple ci-dessous, la fonction calcule la profondeur de la catégorie et vérifie qu’elle est une catégorie principale ( $cat_depth == 0). Si c’est vrai et qu’il y a un template spécifique ( » != $new_template) alors on force wordpress à remplacer le template de catégorie par défaut par notre fichier category-custom-template.php.
Le fait de créer ce fichier spécifique nous permettra ensuite de créer un gabarit de page unique, avec les fonctions, les boucles et l’apparence que l’on souhaite.
Attribuer une classe spécifique par niveau de catégories
Il y a également la possibilité d’attribuer des classes spécifiques aux différents niveaux de catégories, grâce au filtre add_filter( ‘body_class’, …)
Avec cette fonction, vos catégories principales auront une classe level-1 dans le body, et les sous catégories auront la classe level-2. Cela peut permettre de les distinguer plus facilement et d’appliquer un style distinct.