Une des questions qui revient le plus souvent sur le forum wordpress, et qui m’énerve un peu, c’est

je voudrais faire une page avec tous les articles de telle catégorie

Or la « page » est déjà là, mais ce n’est pas une page.
Il faut connaître un peu la structure de base de wordpress, même si on n’est pas informaticien, cela aide un peu à comprendre.

(Nb : cer article a été initialement publié le 20/​12/​2009, il a été entièrement réactualisé le 16÷7÷2015)

Au commencement de tout : la base de données

La base de données WordPress : une grosse boite de fiches

Je ne vais pas, rassurez-​​vous, vous faire un article complet sur la base de données, mais juste vous présenter les tables essentielles pour comprendre cet article.

Les contenus : ils sont dans la table wp_​posts, ils ont un type (post, page, etc), un statut (brouillon, publié, etc), et des champs personnalisés, qui sont des « précisions » et qui se trouvent dans la table wp_​postmeta. Ces deux tables contiennent tout ce qui est publié, donc tout le contenu du site (en dehors des commentaires).

Les classifications de contenus : par exemple, « WordPress » est une des mes catégories, « Duplicate content »  est une de mes étiquettes. Ce sont des « terms » qui sont donc (pour simplifier) dans la table wp_​terms. Ils ont aussi un « type », mais on appelle ça une « taxonomie » (axe de classement). Les taxonomies de base de WordPress sont les catégories et les étiquettes, on peut aussi rajouter les siennes.

Un contenu de type « post », c’est-à-dire « article » a obligatoirement une catégorie. En standard, il n’y a pas de catégorie pour les contenus de type « page ».

Donc, j’ai une boîte de fiches, avec plusieurs types de fiches, et une boites de petits stickers de différentes couleurs, que j’utilise sur mes fiches, en mettant un mot dessus.

La publication, le « post » est un article ou une page

On ne parle pas de page internet, c’est déjà cela qu’il faut comprendre. Une page internet, c’est ce qui s’affiche en une seule fois quand on entre une url dans son navigateur.

Dans le cas de WordPress, cette « page » va être en fait le résultat du traitement des informations dans la base de données, des instructions php et de la mise en forme du thème (Pour plus de détails, le premier article de cette série « Avant de commencer »)

Donc il va falloir regarder dans la base de données, pour comprendre ce qu’est, au sens WordPress, une page, un article, une catégorie, une étiquette (tag ou mot clé dans les anciennes versions), et les « pages » qui permettent d’afficher les articles d’une catégorie ou d’un tag (et qui sont en réalité, au sens de WordPress, des archives.

Les archives permettent d’afficher des contenus mis ensemble sur une nouvelle page internet.

Chaque type de classification (taxonomie), mais aussi les auteurs, les dates, vont permettre de créer une « page d’archive ».

La page d’accueil du blog est souvent une page d’archive particulière, qui liste les derniers articles parus (mais on peut aussi avoir une « page statique »).

La différence entre un contenu article et un contenu page

La différence entre un article et une page, c’est donc ce qu’on peut en faire. Dans la toute première version de WordPress, les pages n’existaient pas. Seuls des articles, qui avaient une date, une ou plusieurs catégories, et qui étaient listés sur la page d’accueil (page au sens internet), normalement du plus récent au plus ancien.

Aussi quand on voulait faire un article pour se présenter, donner ses informations de contact, par exemple, ou présenter les produits que l’on vend (comme je le fais), celui-​​ci allait obligatoirement peu à peu disparaître dans les profondeurs du blog. Il fallait donc une sorte de publication qui était en dehors du « cycle chronologique », et WordPress a proposé des pages. On les appelle aussi « pages statiques » à cause de cela.

De plus les pages sont hiérarchisées. On peut avoir des « sous-​​pages » d’une page principale. Cela peut être utile, quand on a de nombreuses pages, pour les organiser. Dans ce cas, l’url de la sous-​​page contient l’url de la page : example.com/mapage/masouspage

En gros, comme elles ne disparaissaient pas dans les archives du blog, il n’y avait pas besoin de les rechercher. Plus simple, moins de fonctionnalités.

Dans la plupart des thèmes, le menu par défaut est une liste automatique de vos pages.

Le seul « plus », c’est la relative facilité de faire des présentations différentes par page, avec les templates de pages. Mais en fait, cet avantage n’en est pas un, car il existe pour tous les autres éléments de la base.

On peut désormais utiliser, pour les articles et les pages statiques, des « page builder » (que je n’aime pas du tout pour des tas de raisons) et qui ont le seul avantage de faire des mises en pages très complexes sans toucher au code.

Les types de contenu personnalisés, ou custom post type, qu’on peut créer désormais à volonté, seront de « type » page ou post : les contenus personnalisés de type post sont traités chronologiquement, les contenus personnalisés de type page peuvent être hiérarchisés.

Catégories ou étiquettes (ou mots clés ou tags)

Comment marquer ses contenus dans WordPress

Dans la version anglaise, on parle de tag. Dans la version française la traduction a évolué, « mot clé » s’est transformé en « étiquette », qui est beaucoup plus juste, cela évite la confusion avec les « mots clés pour le référencement » et la balise keywords.

La seule vraie différence, c’est que les catégories sont hiérarchisées, et les étiquettes ne le sont pas. Et qu’un article doit obligatoirement avoir une catégorie, mais qu’il peut ne pas avoir d’étiquette.

Donc, par défaut, l’url d’une page d’archive de catégorie contient l’url de la catégorie parente. Et la page d’archive d’une catégorie contient les articles des sous-​​catégories, par défaut.(Si dans un blog de cuisine, le clafoutis est classé dans les desserts aux fruits, sous catégorie des desserts, il apparaitra aussi quand on demande « les desserts »).

C’est mauvais pour le référencement, on y reviendra bientôt. C’est un problème de duplicate content interne.

Il n’y a, d’un point de vue technique, aucune autre différence.

Et d’un point de vue SEO, on peut bourriner avec les catégories ou avec les étiquettes, sans que la technique y soit pour grand chose.

Les termes, quel que soit la taxonomie, peuvent avoir une description.

Voir tous les articles d’une catégorie

(Ou d’une étiquette, ou d’une taxonomie personnalisée… vous avez compris le principe).

C’est une fonction de base WordPress.
Quand on clique sur le lien d’une catégorie en bas d’un article, on arrive sur une page souvent semblable à l’accueil, dans sa présentation (une liste d’articles, souvent avec le résumé du contenu, classé par ordre décroissant), mais appartenant à la catégorie que l’on demande.

L’affichage est généré par un fichier particulier du thème, qui s’appelle category.php.

Donc, normalement, toutes les catégories s’affichent de la même façon.

Inutile de faire une page… elle existe déjà.

Inclure une catégorie dans un menu

Pour inclure une catégorie dans un menu, c’est très simple. Les catégories n’apparaissent pas par défaut, en cliquant sur le petit onglet « option » en haut à droite de l’écran, on peut faire apparaitre ce qu’on veut.

L’écran par défaut pour la création de menu

Voilà la liste de tous les types d’éléments que je peux insérer dans un menu dans mon blog (don’t panic, il y a plein de trucs maison).

Faire apparaitre les autres possibilités

Et voilà en ayant sélectionné les catégories, il est maintenant très simple d’inclure une catégorie dans un menu

Inclure une catégorie dans un menu, aussi simplement qu’une page

D’ailleurs, il y a plein de catégories dans mon menus. Les séries sont une taxonomie personnalisée.

Différencier la présentation pour une catégorie

C’est d’ailleurs la principale raison de la demande « je veux faire une page pour mes catégories ».

Eh bien non…. là encore il y a des fonctions standard de WordPress !  (Oui, j’aime WordPress, et c’est pas pour rien).

Faire un template particulier pour une catégorie dans un thème

Mettons que vous ayiez un blog de cuisine, et que vous souhaitiez afficher la catégorie « faire son marché » différemment des autres catégories, qui elles concernent les recettes.
Il suffit de créer un autre fichier dans le thème, appelé category-xx.php avec l’id de la catégorie à la place de xx et le tour est joué.

A partir la version 2.9 il est aussi possible d’appeler le fichier category-slug.php ce qui rend la maintenance du thème nettement plus lisible. Le « slug », c’est l’identifiant de la catégorie qu’on retrouve dans l’url.

Utiliser la fonction get template part

C’est un peu plus compliqué en terme de programmation, mais voilà comment ça marche :
Dans un template (pour nous archive de catégorie, category.php) on va, à un moment « inclure » un autre fichier, php. Mettons que son nom soit content-category.php
La fonction sera la suivante :

$id = $cat->ID ;
get_template_part ( 'content-category', $id ) ;

Et là, magie de WordPress, SI vous avez fait un fichier content-category-10.php et que vous êtes en train d’afficher l’archive de catégorie « 10 », c’est ce fichier là que WordPress va chercher. Pour toutes les autres catégories, il affichera content-category.php
Cela permet d’avoir une structure unique pour toutes ses archives de catégorie, et d’isoler dans des petits sous-​​fichiers ce qui sera réellement différent pour une catégorie donnée.
Ainsi, si on veut modifier un élément commun à toutes les catégories, on modifie uniquement category.php, alors que dans la méthode précédente, il fallait aussi modifier category-slug.php

Une tomate différente — © Lumière de Lune

Comment choisir ?

Honnêtement, cela dépend de plein de choses. Il n’y a pas de réponse unique.

Votre thème joue beaucoup, déjà, à la base. Ensuite de vos données, de la façon dont vous les organisez, et de ce que vous voulez faire apparaitre dans le template part (pour les programmeurs, les valeurs de variables ne sont pas transmises via cette méthode).

Cela fait donc partie des choses sur lesquelles je conseille mes clients quand j’optimise leur thème, et que je programme, sans utiliser de plugin.

Afficher l’url avec seulement la catégorie, sans la hiérarchie

C’est aussi une demande, et très valide, en terme de SEO, cela permet de raccourcir des urls qui sinon peuvent être un peu longues.
Pour cela, j’ai trouvé un plugin que je vais utiliser sur la prochaine version du blog d’une agence de voyage à Ouarzazate, c’est Single Category Permalink.

L’avantage de rester avec les catégories au lieu de faire une page ?

Il est énorme. Au point de vue développement, et au point de vue SEO.

Une maintenance plus facile et une meilleure performance

Au lieu de refaire un template de page quasi complet, et notamment de refaire une requête pour appeler les articles que vous voulez voir, vous utilisez toutes les fonctions de base de WordPress.
Donc celles qui sont mises à jour quand le modèle de données change (comme avec la version 2.5 qui avait profondément changé la structure de la base pour les tags et les catégories).

Éviter le duplicate content

Le deuxième avantage, c’est que faire une page pour afficher une catégorie donnée ne « shunte » pas le mécanisme de base de WordPress. Vous allez donc avoir dans toutes vos listes de catégories (sidebar, liste en bas du post), un lien vers la « page de catégorie » WordPress, celle qui est générée par le template category.php et dont le contenu sera étrangement similaire à celui de votre page.
Et duplicate content is bad !

Des possibilités de personnalisation avancées

La description, avec l’utilisation d’un plugin pour avoir l’éditeur visuel, permet déjà pas mal de choses. Mais, tant qu’à faire, on peut aller beaucoup plus loin dans la personnalisation des archives de taxonomie, ce sera l’objet d’un article « techniques avancée ».

Photos :

  • Une structure originale, photo sous licence CC BY Janderson L.
  • Boite à fiches par Juli, licence CC BY NC ND
  • Etiquettes WordPress par Jon Fisher (CC BY)
  • Tomates par moi, tous droits réservés [mode touche pas à ma photo krav-​​maga incident nucléraire on]
Que pensez-vous de cet article ?
Super0
Bien0
Bof0
Nul0
Poster un commentaire