À propos de ce tutoriel
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() ?>