4. Les types de contenus et les taxonomies

Sommaire

Introduction

Par défaut, il n'existe que deux types de contenus : les pages et les articles.
Un type de contenu peut être hiérarchique (pages) ou non (articles).

Un type de contenu peut être associé à une ou plusieurs taxonomie(s).
Par défaut il n'en existe que deux : les catégories et les étiquettes (ou tags).
Les valeurs d'une taxonomie sont appellées des termes.

Créer un type de contenu

Il y a deux manières de créer un type de contenu :

  • Depuis un plugin comme Custom Post Type UI
  • Depuis votre thème ou un plugin développé sur-mesure (recommandé)

Pour créer un type de contenu, la fonction à utiliser est register_post_type(). Cette fonction prend deux paramètres :

  • L'identifiant (slug) du type de contenu
  • Un tableau de paramètres (voir le Codex)

Il y a beaucoup d'options disponibles dans le deuxième paramètres mais retenez essentiellement les suivantes :

  • labels : liste (array) de libellés correspondant au type de contenu (voir la liste complète)
  • public : détermine si le type de contenu doit être accessible (false par défaut)
  • has_archive : détermine si le type de contenu dispose d'une page d'archive (false par défaut)
  • hierarchical : détermine si le type de contenu est hiérarchique (false par défaut)
  • supports : liste (array) des options activées pour le type de contenu
  • rewrite : paramètres de réécriture d'URL
  • menu_icon : icône à afficher dans l'administration (voir les Dashicons)
  • show_in_rest : détermine si le type de contenu est disponible dans l'API (false par défaut)
functions.php
La fonction ci-dessus va créer un nouveau type de contenu "Film"

Créer une taxonomie

Pour créer une taxonomie, la fonction à utiliser est register_taxonomy(). Cette fonction prend trois paramètres :

  • L'identifiant (slug) de la taxonomie
  • Le(s) type(s) de contenus associé(s)
  • Un tableau de paramètres (voir le Codex)

Les options disponibles pour le tableau de paramètres sont très similaires à celles de register_post_type.

functions.php
La fonction ci-dessus va créer une taxonomie "Genre" pour le type de contenu "Film"

Pour que la taxonomie apparaisse dans l'éditeur des contenus auxquelles elle est associée, il est nécessaire de renseigner le paramètre show_in_rest avec la valeur true.

Type de contenu personnalisé

Les templates

Le template à créer pour un type de contenu personnalisé est single-$posttype.php, en remplaçant $posttype par le nom de votre type de contenu. Pour un film, le template s'appellera alors single-film.php.
Sous réserve que votre type de contenu dispose d'une page d'archive (avec l'option has_archive paramétrée à true), vous pourrez également créer le template archive-film.php.

Vos taxonomies personnalisées disposent elles aussi de leurs propres templates : taxonomy-$taxonomy.php pour la page d'archive des contenus associés à la taxonomie $taxonomy et taxonomy-$taxonomy-$term.php pour les contenus associés au terme $term de la taxonomie $taxonomy.
Le template de la taxonomie "Genre" créée précédemment sera alors taxonomy-genre.php.

Afficher tous les termes d'une taxonomie

La fonction get_terms() permet de récupérer tous les termes d'une taxonomie. Elle prend en paramètre un array (voir les options possibles dans le Codex). L'option la plus importante est l'option taxonomy qui permet de définir la taxonomie pour laquelle vous souhaitez récupérer les termes.

Par défaut, les termes n'ayant aucun contenu lié ne seront pas retournés. Pour les afficher, vous devrez indiquer la valeur false pour l'option hide_empty.

La fonction retourne un array d'objets WP_Term.

archive-film.php
Affichage de tous les genres sous forme de tags cliquables dans la page d'archive des films

Notez l'utilisation ici de la fonction get_term_link() pour récupérer l'URL de la page d'un terme.

Archive des films

Afficher les termes liés à un contenu

Pour afficher uniquement les termes d'une taxonomie qui sont liés à un contenu, la fonction à utiliser est get_the_terms(). Celle-ci prend deux paramètres :

  • L'objet WP_Post ou bien son identifiant
  • La taxonomie pour laquelle vous souhaitez récupérer les termes

Dans un template Wordpress, l'objet WP_Post est automatiquement défini à chaque itération de la boucle dans une variable globale $post. Il suffira alors d'indiquer cette variable $post comme premier paramètre de get_the_terms() pour récupérer les termes du contenu.

single-film.php
Affichage de tous les genres associés à un film dans sa page
Page d'un film