Tivemos um post aqui no blog falando de uma implementação realizada no WP 4.6 que foi a introdução da classe WP_Post_type e como ela nos beneficia em nosso desenvolvimento. Hoje nosso foco será uma nova classe inserida na versão 4.7 do WordPress, a WP_Taxonomy.
O WordPress 4.7 ainda está na versão beta, porém ao longo de seus releases estamos testando o que de novo ele está trazendo para o mundo dos devs, então, sem mais delongas, estarei descrevendo abaixo o que mudou com a inserção dessa classe e como ela nos beneficia como desenvolvedores.
O que mudou com a chegada da WP_Taxonomy?
A variável global $wp_taxonomies que antes recebia um array de objetos da stdClass, agora recebe um array de objetos da WP_Taxonomy.
Esta nova classe, fornece métodos para trabalhar com reescrita de regras ( rewrite rules ) e hooks, métodos estes que são utilizados internamente pelas funções register_taxonomy() e unregister_taxonomy().
Os seguintes métodos se encontram dentro da WP_Taxonomy, e estes são utilizados pelas funções citadas acima:
- add_rewrite_rules()
- add_hooks()
- remove_rewrite_rules()
- remove_hooks()
A seguinte função foi modificada para retornar um objeto WP_Taxonomy:
Os seguintes parâmetros agora são um objeto desta nova classe:
- O segundo parâmetro $taxonomy do hook xmlrpc_prepare_taxonomy.
- O segundo parâmetro $tax do hook term_search_min_chars.
A seguinte função agora aceita um objeto da WP_Taxonomy:
Novas capabilities para a gestão de taxonomias
Além das mudanças já citadas, o WordPress 4.7 apresenta novos termos de taxonomias individuais, permitindo que os desenvolvedores implementem um controle mais detalhado a respeito de um gerenciamento de termos (categorias, tags e termos de categorias personalizadas (custom category)). As novas capabilities são meta capabilities que, em última análise, mapeam de volta os recursos já existentes, portanto, não há nenhuma mudança no comportamento das funcionalidades existentes e usuários.
Novas Capabilities
- edit_term
- delete_term
- assign_tem
Da mesma forma que os recursos como edit_post e delete_user são usados para verificar se um pode ou não executar uma ação para um post ou usuário específico, esses novos recursos podem ser usados para verificar se um usuário pode ou não executar uma ação para um termo específico.
Caso esteja verificando um dos novos recursos, você pode incluir o term_id como segundo parâmetro. Exemplo:
if ( current_user_can( 'edit_tem', $term_id ) ) { printf( '<a href="%s">Editar</a>', get_edit_term_link( $term_id ) ); }
Como havia dito, as novas capabilities são meta capabilities o que significa que, em última análise, mapeam de volta para a capability manage_categories já existente por padrão, ou qualquer outra que seja especificada nos argumentos quando estiver registrando a taxonomia. As capabilities podem ser filtradas usando o filtro map_meta_cap, da seguinte forma:
add_filter( 'map_meta_cap', function( $required_cap, $cap, $user_id, $args ) {
switch( $cap ) :
case 'delete_term':
$term_id = $args[0];
// Prevent a "protected" term from being deleted:
if( get_term_meta( $term_id, 'protected', true ) ) {
$required_cap[] = 'do_not_allow';
}
break;
case 'edit_term':
// Introduce some anarchy:
if( rand( 1, 6 ) == 3 ) {
$required_cap = 'do_not_allow';
}
break;
endswitch;
return $required_cap;
}, 10, 4);
Separando Capabilities por Tags e Categorias
Uma outra alteração é que agora a taxonomia de tag usa capabilities separadas da taxonomia de categoria (antes usava-se as mesmas capabilities para ambas as taxonomias). Isso não altera o comportamento já existente, mas significa que agora podemos segmentar os recursos de tags separadamente das categorias. Por exemplo:
add_filter( 'map_meta_cap', function( $required_cap, $cap, $user_id, $args ) {
switch( $cap ) :
case 'manage_post_tags':
case 'edit_post_tags':
case 'delete_post_tags':
case 'assign_post_tags':
// Allow Authors to manage tags:
$required_cap = array( 'publish_posts' );
break;
endswitch;
return $required_cap;
}, 10, 4);
Conclusão
A introdução de uma classe como a WP_Post_Typee a WP_Taxonomy, fora outras que possam estar vindo a serem inseridas, tornam as melhorias do WordPress ainda mais viáveis. Estamos aguardando para ver quais outras novidades estão por vir nesta nova versão 4.7 do WordPress.