Você sabia que é possível criar metadados para as taxonomias semelhantemente ao que fazemos nos posts?
Por muito tempo, nós aqui na Apiki utilizamos o plugin Taxonomy Metadata que nos ajudou bastante na tarefa, entretanto nessa nova versão o WordPress implementará essa funcionalidade nativamente através dos Term Metas.
Vamos conferir como ficou?
Estrutura do banco de dados
A primeira novidade foi a inclusão de uma nova tabela chamada “{seu_prefixo}termmeta” para a manipulação dos metadados. Observe que sua estrutura ficou bem parecida com a tabela {seu_prefixo}postmeta que temos para armazenar os “post metas”.
Novas funções
Foram incluídas novas funções para nos ajudar manipular esses term metas, veja as principais :
- add_term_meta( $term_id, $meta_key, $meta_value, $unique = false )
- delete_term_meta( $term_id, $meta_key, $meta_value = ” )
- get_term_meta( $term_id, $meta_key, $single = false )
- update_term_meta( $term_id, $meta_key, $meta_value, $prev_value = ” )
- update_termmeta_cache( $term_ids )
Percebam que os argumentos e até mesmo os nomes seguem o padrão utilizado nas funções para manipulação de post metas.
Mas como implementar esses metadados?
Nesse exemplo criaremos um novo campo de texto personalizado para a categoria padrão de “posts”.
No seu arquivo functions.php insira o seguinte código:
<?php
add_action( 'create_category', 'save_category_metas' );
add_action( 'edited_category', 'save_category_metas' );
add_action( 'delete_category', 'delete_category_metas' );
add_action( 'category_edit_form_fields', 'render_category_metas' );
?>
No trecho acima definimos as funções que serão executadas na inclusão, edição e exclusão dos termos através dos hooks create_{taxonomy}, edited_{taxonomy}, delete_{taxonomy}.
Já o hook {taxonomy}_edit_form_fields é responsável por exibir o campo que criamos através da função render_category_metas.
<?php
function render_category_metas( $term )
{
$my_term_meta = get_term_meta( $term->term_id, 'my_term_meta', true );
?>
<div class="form-field">
<tr class="form-field">
<th scope="row" valign="top">
<label>Meu primeiro "Term Meta"</label>
</th>
<td>
<input type="text" name="my_term_meta" value="<?php echo $my_term_meta; ?>"/>
<?php wp_nonce_field('my_term_meta_nonce_action','my_term_meta_nonce_field'); ?>
</td>
</tr>
</div>
<?php
}
Por fim temos as funções que salvam e excluem os metas:
function save_category_metas( $term_id )
{
if ( isset( $_POST['my_term_meta'] )
&& wp_verify_nonce( $_POST['my_term_meta_nonce_field'], 'my_term_meta_nonce_action' ) ) {
update_term_meta( $term_id, 'my_term_meta', strip_tags( $_POST['my_term_meta'] ) );
}
}
function delete_category_metas( $term_id )
{
delete_term_meta( $term_id, 'my_term_meta' );
}
O resultado ficou assim:
Fique ligado…
A partir de agora não é mais necessário utilizar plugins para implementar essa funcionalidade, mas existem muitos deles no mercado. Caso você utilize algum deles, fique atento, pois se o plugin não foi desenvolvido utilizando as melhores práticas poderão ocorrer alguns conflitos.
Até a próxima e continuem acompanhando as novidades sobre essa nova versão do WordPress aqui no blog.