Bien que tous les thèmes n’utilisent pas des taxonomies personnalisées dans le cadre du thème lui-même (peut-être pour les portefeuilles), 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 trop souvent, ce sont des thèmes qui ne prennent pas suffisamment en charge les taxonomies personnalisées dans leurs modèles d’archives et qui finissent par provoquer une erreur PHP lors de la visualisation d’une archive de taxonomie. Ce tutoriel 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 de modèle.

Ce didacticiel supposera que toutes les archives de catégories, de balises et de taxonomie sont affichées avec votre unique archive.php fichier, par opposition à des fichiers séparés pour category.php, tag.php, etc.

La plupart du temps, au sommet du 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 adaptées à utiliser, sauf qu’elles ne fonctionnent pas avec des 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 de tag_description () fonction, nous verrons qu’il ne s’agit en fait que d’une référence à la term_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 la la source), nous voyons qu’il détectera réellement le type de taxonomie actuel qui est affiché et affichera la description du terme à partir de la taxonomie appropriée, au lieu de renvoyer 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 fonction intéressante 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 (sauf si vous créez des mises en page personnalisées pour chacun) et c’est également beaucoup plus sûr.

Share: