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 archive.php archivo, a diferencia de archivos separados para category.php, tag.php, etc.
La mayor parte del tiempo, en la parte superior de la archive.php archivo, los desarrolladores de temas colocarán algo como esto:
<h2><?php echo single_cat_title(); ?></h2>
<div class="category-description"><?php echo category_description(); ?></div>
O esto:
<h2><?php echo single_tag_title(); ?></h2>
<div class="tag-description"><?php echo tag_description(); ?></div>
O una combinación:
<?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 } ?>
Todas estas son funciones perfectamente adecuadas para usar, excepto que no funcionan con taxonomías personalizadas y, de hecho, darán lugar a un error (si no se usa un condicional is_category / is_tag).
Si miramos el código fuente para tag_description () función, veremos que en realidad es solo una referencia a la función similar term_description () función, 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 el fuente), vemos que en realidad 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 lo 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 todo taxonomías:
<h2><?php echo single_term_title(); ?></h2>
<div class="tax-description"><?php echo term_description(); ?></div>
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.