Bien que tous les thèmes n’utilisent pas de taxonomies personnalisées dans le cadre du thème lui-même (peut-être pour les portfolios), il est absolument essentiel que tous les thèmes incluent une prise en charge complète des archives de taxonomie personnalisées. Ce que je vois bien trop souvent, ce sont des thèmes qui ne prennent pas en charge de manière adéquate les taxonomies personnalisées dans leurs modèles d’archives et finissent par provoquer une erreur PHP lors de l’affichage d’une archive de taxonomie. Ce didacticiel rapide va vous montrer un moyen très simple d’éviter ce problème et de fournir une prise en charge complète des taxonomies personnalisées, le tout dans un seul fichier modèle.
Ce didacticiel suppose que toutes les archives de catégories, de balises et de taxonomie sont affichées avec votre single archive.php fichier, par opposition à des fichiers séparés pour catégorie.php, balise.php, etc.
La plupart du temps, au sommet de la archive.php fichier, les développeurs de thèmes placeront quelque chose comme ceci :
<h2><?php echo single_cat_title(); ?></h2>
<div class="category-description"><?php echo category_description(); ?></div>
Ou ca:
<h2><?php echo single_tag_title(); ?></h2>
<div class="tag-description"><?php echo tag_description(); ?></div>
Ou une combinaison :
<?php if( is_category() ) { ?>
<h2><?php echo single_cat_title(); ?></h2>
<div class="category-description"><?php echo category_description(); ?></div>
<?php } elseif( is_tag() ) { ?>
<h2><?php echo single_tag_title(); ?></h2>
<div class="tag-description"><?php echo tag_description(); ?></div>
<?php } ?>
Ce sont toutes des fonctions parfaitement utilisables, sauf qu’elles ne fonctionnent pas avec les taxonomies personnalisées et entraîneront en fait une erreur (si vous n’utilisez pas une condition is_category/is_tag).
Si nous regardons le code source pour le tag_description() fonction, nous verrons qu’il ne s’agit en fait que d’une référence à la terme_description() fonction, mais avec le paramètre « post-tag » défini par défaut.
/**
* Retrieve tag description.
*
* @since 2.8
*
* @param int $tag Optional. Tag ID. Will use global tag ID by default.
* @return string Tag description, available.
*/
function tag_description( $tag = 0 ) {
return term_description( $tag );
}
La fonction term_description() est vraiment sympa car (si on regarde le la source), nous voyons qu’il détectera en fait le type de taxonomie actuel qui est affiché et affichera la description du terme à partir de la taxonomie appropriée, au lieu de lancer l’erreur comme le fait tag_description(). Voir la fonction ci-dessous :
/**
* Retrieve term description.
*
* @since 2.8
*
* @param int $term Optional. Term ID. Will use global term ID by default.
* @param string $taxonomy Optional taxonomy name. Defaults to 'post_tag'.
* @return string Term description, available.
*/
function term_description( $term = 0, $taxonomy = 'post_tag' ) {
if ( !$term && ( is_tax() || is_tag() || is_category() ) ) {
$term = get_queried_object();
$taxonomy = $term->taxonomy;
$term = $term->term_id;
}
$description = get_term_field( 'description', $term, $taxonomy );
return is_wp_error( $description ) ? '' : $description;
}
Il existe également une excellente fonction pour le titre du terme de taxonomie qui fonctionne de la même manière : single_term_title()
Tout cela signifie que nous pouvons simplement utiliser ce qui suit dans notre archive.php et cela fonctionnera pour tout taxonomies :
<h2><?php echo single_term_title(); ?></h2>
<div class="tax-description"><?php echo term_description(); ?></div>
C’est bien mieux que de créer plusieurs fichiers pour gérer les différentes taxonomies (à moins que vous ne créiez des mises en page personnalisées pour chacun) et c’est également beaucoup plus sûr.