Metadados em taxonomias, saiba como utilizar no WordPress 4.4

0

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”.

Estrutura da nova tabela
Estrutura da nova tabela

Novas funções

Foram incluídas novas funções para nos ajudar manipular esses term metas, veja as principais :

  1. add_term_meta( $term_id, $meta_key, $meta_value, $unique = false )
  2. delete_term_meta( $term_id, $meta_key, $meta_value = ” )
  3. get_term_meta( $term_id, $meta_key, $single = false )
  4. update_term_meta( $term_id, $meta_key, $meta_value, $prev_value = ” )
  5. 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:

Exemplo de inclusão de um campo personalizado em um categoria
Exemplo de inclusão de um campo personalizado em um categoria

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.