Les taxonomies

Résumé Support

Par défaut WordPress permet de définir plusieurs taxonomies sur les articles : des catégories et des tags. Il est aussi possible de définir ses propres taxonomies à l'aide de la fonction register_taxonomy. Cette fonction permet de déclarer une nouvelle taxonomy qui pourra ensuite être utilisé dans l'administration.

function montheme_register_sport() { register_taxonomy('sport', 'post', [ 'labels' => [ 'name' => 'Sport', 'singular_name' => 'Sport', 'plural_name' => 'Sports', 'search_items' => 'Rechercher des sports', 'all_items' => 'Tous les sports', 'edit_item' => 'Editer le sport', 'update_item' => 'Mettre à jour le sport', 'add_new_item' => 'Ajouter un nouveau sport', 'new_item_name' => 'Ajouter un nouveau sport', 'menu_name' => 'Sport', ], 'show_in_rest' => true, 'hierarchical' => true, 'show_admin_column' => true, ]); } add_action('init', 'montheme_register_sport');

Vous pouvez ensuite récupérer la liste de ces taxonomies sur vos pages articles. Par exemple pour créer une navigation pour notre taxonomy :

<?php $sports = get_terms(['taxonomy' => 'sport']); ?> <ul class="nav nav-pills my-4"> <?php foreach($sports as $sport): ?> <li class="nav-item"> <a href="<?= get_term_link($sport) ?>" class="nav-link <?= is_tax('sport', $sport->term_id) ? 'active' : '' ?>"><?= $sport->name ?></a> </li> <?php endforeach; ?> </ul>

Vous pouvez aussi créer une page personnalisée pour votre taxonomy en créant un fichier taxonomy-<taxonomy>.php.

<?php get_header() ?> <h1><?= esc_html(get_queried_object()->name) ?></h1> <p> <?= esc_html(get_queried_object()->description) ?> </p> <?php $sports = get_terms(['taxonomy' => 'sport']); ?> <?php if (is_array($sports)): ?> <ul class="nav nav-pills my-4"> <?php foreach($sports as $sport): ?> <li class="nav-item"> <a href="<?= get_term_link($sport) ?>" class="nav-link <?= is_tax('sport', $sport->term_id) ? 'active' : '' ?>"><?= $sport->name ?></a> </li> <?php endforeach; ?> </ul> <?php endif ?> <?php if (have_posts()) : ?> <div class="row"> <?php while (have_posts()) : the_post(); ?> <div class="col-sm-4"> <?php get_template_part('parts/card', 'post'); ?> </div> <?php endwhile ?> </div> <?php montheme_pagination() ?> <?php else : ?> <h1>Pas d'articles</h1> <?php endif; ?> <?php get_footer() ?>