Arquivos compatíveis com taxonomia personalizada
Embora nem todos os temas utilizem taxonomias personalizadas como parte do próprio tema (talvez para portfólios), é absolutamente vital que todos os temas incluam suporte completo para arquivos de taxonomia personalizados. O que vejo com muita frequência são temas que não suportam adequadamente taxonomias personalizadas em seus modelos de arquivo e acabam causando um erro de PHP ao visualizar um arquivo de taxonomia. Este tutorial rápido mostrará uma maneira realmente fácil de evitar esse problema e fornecer suporte completo para taxonomias personalizadas, tudo em um único arquivo de modelo.
Este tutorial vai assumir que todos os arquivos de categoria, tag e taxonomia são exibidos com seu único arquivo archive.php , em oposição a arquivos separados para category.php, tag.php, etc.
Na maioria das vezes, no topo do arquivo archive.php , os desenvolvedores de temas colocam algo assim:
<h2><?php echo single_cat_title(); ?></h2>
<div class=”category-description”><?php echo category_description(); ?></div>
Ou isto:
<h2><?php echo single_tag_title(); ?></h2>
<div class=”tag-description”><?php echo tag_description(); ?></div>
Ou uma combinação:
<?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 } ?>
Essas são todas funções perfeitamente boas para usar, exceto que elas não funcionam com taxonomias personalizadas e realmente resultarão em um erro sendo lançado (se não estiver usando uma condicional is_category/is_tag).
Se observarmos o código-fonte da função tag_description(), veremos que na verdade é apenas uma referência à função term_description() semelhante , mas com o parâmetro “post-tag” definido como padrão.
/**
* 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 );
}
A função term_description() é muito boa porque (se olharmos para a fonte ), vemos que ela realmente detectará o tipo de taxonomia atual que está sendo exibido e exibirá a descrição do termo da taxonomia adequada, em vez de lançar o erro como tag_description() faz. Veja a função abaixo:
/**
* 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;
}
Há também uma ótima função para o título do termo de taxonomia que funciona da mesma maneira: single_term_title()
Isso tudo significa que podemos simplesmente usar o seguinte em nosso arquivo.php e funcionará para todas as taxonomias:
<h2><?php echo single_term_title(); ?></h2>
<div class=”tax-description”><?php echo term_description(); ?></div>
Isso é muito melhor do que criar vários arquivos para lidar com as diferentes taxonomias (a menos que você esteja criando layouts personalizados para cada um) e também é muito mais seguro.