Archivos amigables con taxonomía personalizada

Si bien no todos los temas utilizan taxonomías personalizadas como parte del tema en sí (quizás para carteras), es absolutamente vital que todos los temas incluyan soporte completo para archivos de taxonomías personalizadas. Lo que veo con demasiada frecuencia son temas que no admiten adecuadamente las taxonomías personalizadas en sus plantillas de archivo y terminan provocando un error de PHP al ver un archivo de taxonomía. Este rápido tutorial le mostrará una manera realmente fácil de evitar este problema y brindará soporte completo para taxonomías personalizadas, todo en un solo archivo de plantilla.

Este tutorial asumirá que todos los archivos de categorías, etiquetas y taxonomías se muestran con su único archivo archive.php, en lugar de archivos separados para category.php, tag.php, etc.

La mayoría de las veces, en la parte superior del archivo archive.php, los desarrolladores de temas colocarán algo como esto:

O esto:

O una combinación:


	

Todas estas son funciones perfectamente adecuadas para usar, excepto que no funcionan con taxonomías personalizadas y en realidad darán como resultado un error (si no se usa un condicional is_category / is_tag).

Si miramos el código fuente de la función tag_description (), veremos que en realidad es solo una referencia a la función similar term_description (), pero con el parámetro “post-tag” configurado como predeterminado.

/**
 * 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 función term_description () es realmente agradable porque (si miramos la fuente), vemos que realmente detectará el tipo de taxonomía actual que se está mostrando y mostrará la descripción del término de la taxonomía adecuada, en lugar de arrojar el error como hace tag_description (). Vea la función a continuación:

/**
 * 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;
}

También hay una gran función para el título del término de taxonomía que funciona de la misma manera: single_term_title ()

Todo esto significa que simplemente podemos usar lo siguiente en nuestro archive.php y funcionará para todas las taxonomías:

Eso es mucho mejor que crear varios archivos para tratar con las diferentes taxonomías (a menos que esté creando diseños personalizados para cada una) y también es mucho más seguro.