Mémos

M é m o - l a b .

Les taxonomies

Les taxonomies sont utilisées comme principe de classification de contenus consistant à les regrouper sur une base de caractéristiques communes.
Les 2 taxonomies disponibles par défaut dans WordPress pour les articles sont les catégories et les étiquettes (tags).

Les catégories sont hiérarchisables (possibilité de créer des sous catégories) et obligatoires. Elles permettent d’établir une classification globale susceptible d’être affinée par les étiquettes (spécificité du contenu) qui sont utilisées pour trier les contenus autrement, de façon plus fine, sur un terme précis que l’on retrouve dans différents contenus. Un contenu peut posséder plusieurs catégories et étiquettes.

Lorsque l’on crée un type de contenu (CPT), il est possible, depuis le fichier functions.php, de lui attribuer des taxonomies en utilisant la fonction register_taxonomy(). Prenons pour exemple la création d’un site web proposant la vente de biens immobiliers. Réservons les contenus de type post (articles) pour la création d’un éventuel blog. Nous créons alors un CPT pour gérer les biens immobiliers (cf chapitre Les Custom Post Type). Ceux-ci peuvent être classifiés sur la base de différentes caractéristiques comme par exemple le type d’habitat (appartement, maison, habitat alternatif …). Cette classification plutôt généraliste équivaut aux catégories des contenus de type post (articles). L’aspect singulier des biens proposés (Maison en pierre, Maison atypique, Tiny-house, Appartement duplex …) peut être assimilé aux étiquettes (tags). Ces 2 taxonomies (type d’habitat et singularité) seront distinguées, lors de leur création, par la valeur de l’argument hierarchical.

La fonction get_term_link() génère un permalien vers un template affichant tous les biens correspondant à une certaine taxonomie. Prenons l’exemple des types de bien appartement, les arguments à passer à la fonctions sont les suivants : get_term_link(‘appartement’, ‘type-habitat’). Il est également possible de passer en argument un objet comme il l’est montré dans le code ci-dessous. Le concept de template hierarchy nous indique les différents templates cibles possibles de ce lien : taxonomy-type-habitat-appartement.php > taxonomy-type-habitat.php > taxonomy.php > archive.php > index.php.

Utilisation d’un CPT

La compréhension par le code





functions.php

<?php
function immo_post_type() {
        // Création du cpt (immo) permettant de gérer les
        // biens immobiliers (cf chapitre Les Custom Post Type)
	$labels = [...];
	$args = [...];
	register_post_type('immo', $args);

	// Taxonomie Type d'habitat (type-habitat) : Maison, Appartement, Habitat alternatif ...
    $labels_type_habitat = [
        'name' => 'Type d\'habitat',
        'new_item_name' => 'Ajouter un type d\'habitat',
    ];
    $args_type_habitat = [ 
        'labels' => $labels_type_habitat,
        // Taxonomie disponible dans la page admin 
        // d'édition d'un contenu de type immo
        'show_in_rest' => true,
        // Taxonomie hiérarchisable
        'hierarchical' => true, 
    ];
    // La taxonomie type-habitat est associée au cpt immo
    register_taxonomy('type-habitat', 'immo', $args_type_habitat );

    // Taxonomie particularités (amenagement) : cuisine équipée, 
    // panneaux solaires, piscine ...
    $labels_amenagement = array(
        'name' => 'Aménagement',
        'new_item_name' => 'Ajouter un aménagement',
    );
    $args_amenagement = array( 
        'labels' => $labels_amenagement,
        // Taxonomie disponible dans la page admin 
        // d'édition d'un contenu de type immo
        'show_in_rest' => true,
        // Taxonomie non hiérarchisable
        'hierarchical' => false, 
    );
    register_taxonomy('amenagement', 'immo', $args_amenagement );
}
add_action( 'init', 'immo_post_type', 0 );



template php

// Affichage des taxonomies à l'intérieur de la loop WP
<p><?php the_terms(get_the_ID(), 'type-habitat', 'Type d\'habitat : ', ', ', ''); ?></p>
<p><?php the_terms(get_the_ID(), 'amenagement', 'Aménagement: ', ', ', '' ) ?></p>



template php

// Boucle affichant sous forme de lien, une liste des différents types 
// d'habitats. Le click sur un lien dirige vers un template cible
// (cf template hierarchy) permettant d'afficher à l'aide de la loop WP
// la liste des biens correspondants.
$terms = get_terms('type-bien');
    echo '<ul>';
    foreach ($terms as $term) {
    ?>
    	<li><a href="<?php echo esc_url(get_term_link($term)); ?>"><?php echo $term->name; ?></a></li>
    <?php }
    echo '</ul>';



template php

// Boucle affichant sous forme de lien, une liste des différents
// aménagements. Le click sur un lien dirige vers un template cible
// (cf template hierarchy) permettant d'afficher à l'aide de la loop WP
// la liste des biens correspondants.
<?php  
    $terms = get_terms('amenagement');
    echo '<ul>';
    foreach ($terms as $term) {
    ?>
    	<li><a href="<?php echo esc_url(get_term_link($term)); ?>"><?php echo $term->name; ?></a></li>
    <?php }
    echo '</ul>';
?>

Utilisation des articles

Pour les contenus de type post (articles), il existe2 facons de faire :
Utiliser les mêmes fonctions qu’avec un cpt en ajustant la taxonomie ou utiliser des fonctions propres aux catégories.
Le schema du template hierarchy est le suivant : category-$slug.php > category.php > archive.php > index.php.

La compréhension par le code





template.php
Utilisation des mêmes fonctions que pour les cpt

// Boucle affichant sous forme de lien, une liste des différentes 
// catégories. Le click sur un lien dirige vers un template cible
// (cf template hierarchy) permettant d'afficher à l'aide de la loop WP
// la liste des biens correspondants.
$terms = get_terms('category');
    echo '<ul>';
    foreach ($terms as $term) {
    ?>
    	<li><a href="<?php echo esc_url(get_term_link($term)); ?>"><?php echo $term->name; ?></a></li>
    <?php }
    echo '</ul>';

// Affichage des catégories à l'intérieur de la loop WP
<p><?php the_terms(get_the_ID(), 'category', 'Catégories : ', ', ', ''); ?></p>



template.php
Utilisation de fonctions propres aux categories

// Boucle affichant sous forme de lien, une liste des différentes 
// catégories. Le click sur un lien dirige vers un template cible
// (cf template hierarchy) permettant d'afficher à l'aide de la loop WP
// la liste des biens correspondants.
<?php  
    $categories = get_categories();
    echo '<ul>';
    foreach ($categories as $category) {
    ?>
    	<li><a href="<?php echo get_category_link($category); ?>"><?php echo $category->name; ?></a></li>
    <?php }
    echo '</ul>';
?>

// Affichage des catégories à l'intérieur de la loop WP
<p><?php the_category(','); ?></p>
</code></pre>