Como criar taxonomias personalizadas exclusivas no WordPress
Publicados: 2022-03-11O WordPress, um dos mais poderosos sistemas de gerenciamento de conteúdo e blogs de código aberto, está sendo usado para alimentar uma grande parte das interwebs. Até um quarto de todos os sites executam o WordPress e não há escassez de demanda por serviços de desenvolvimento do WordPress.
Ao contrário de muitos outros CMSs, o WordPress é amado por muitos por sua flexibilidade e personalização. Taxonomias, um dos principais recursos do WordPress, permite organizar o conteúdo da maneira que você precisa. Embora venha embutido com algumas taxonomias padrão, o WordPress permite adicionar quantas taxonomias personalizadas você quiser.
No entanto, fazer com que as taxonomias se comportem exatamente da maneira que você deseja pode exigir que você brinque com algumas abordagens não documentadas.
Neste artigo, você aprenderá como definir taxonomias personalizadas exclusivas no WordPress que se comportam muito mais como categorias do que como tags, permitindo que você categorize suas postagens com muito mais rigor do que pode fazer de imediato.
O que é uma taxonomia?
De acordo com o códice do WordPress:
Uma taxonomia é uma maneira de agrupar coisas.
Por exemplo, um monte de diferentes tipos de frutas pode ser agrupado de acordo com várias características e, em seguida, esses grupos podem receber nomes.
No WordPress, as taxonomias são usadas para agrupar postagens, páginas e até mesmo tipos de postagem personalizados em diferentes grupos.
Os nomes para os diferentes agrupamentos em uma taxonomia são chamados de termos . Veja as frutas, por exemplo, e como elas podem ser agrupadas com base em suas cores. Neste caso, os nomes de cores diferentes seriam os termos.
Por padrão, o WordPress vem integrado com quatro taxonomias: category , tag , link category e post format . Você pode aprender mais sobre essas taxonomias padrão aqui.
Entre essas taxonomias incorporadas, categorias e tags são muito semelhantes, mas têm uma diferença importante: as categorias são taxonomias exclusivas (ou seja, para cada postagem, você pode selecionar no máximo uma categoria), enquanto que cada postagem pode receber várias tags.
Além disso, as categorias geralmente são predefinidas, enquanto as tags podem ser definidas à medida que você avança.
Definindo taxonomias personalizadas
Você pode definir uma taxonomia personalizada usando a função register_taxonomy()
. Você pode saber mais sobre a função aqui.
Para ver como essa função funciona, vamos definir uma taxonomia personalizada para posts com fotos de cenário.
function view_init() { register_taxonomy( 'view', 'post', array( 'label' => __( 'View' ), 'capabilities' => array( 'assign_terms' => 'edit_guides', 'edit_terms' => 'publish_guides' ) ) ); } add_action( 'init', 'view_init' );
No snippet acima, estamos definindo uma nova taxonomia para postagens chamada view .
Você pode pensar nessa taxonomia sendo usada para categorizar fotos com base no tipo ou natureza das visualizações presentes nas fotos (por exemplo, montanha, lago ou floresta).
Como sempre, as postagens que pertencem a termos específicos desta categoria aparecerão em /view/{view_name} .
A linha de recursos no snippet acima é opcional. Sem ele, o WordPress irá configurar os recursos padrão para os mesmos usuários que as postagens. Conforme mostrado acima, isso permitirá que qualquer usuário com o recurso "edit_guides" personalizado atribua a taxonomia a uma postagem e qualquer usuário com o recurso "publish_guides" personalizado para criar novos itens de taxonomia.
De acordo com a documentação oficial, existem quatro capacidades que podem ser definidas:
Os recursos de taxonomia incluem
assignterms
,editterms
,manageterms
(exibe a taxonomia na navegação do administrador) edeleteterms
.
Como as taxonomias são usadas
Em seu código, você pode usar a função wp_set_object_terms()
para adicionar termos a objetos usando a taxonomia. Você pode listar os termos existentes usando a função the_terms()
. Além disso, você pode usar a função wp_tag_cloud()
para gerar uma nuvem de termos para sua taxonomia personalizada. Você pode aprender mais sobre essas funções aqui.
No lado da interface do usuário, o WordPress cria uma nova meta box nas postagens para cada taxonomia. A caixa meta é semelhante à caixa meta Tags, que permite vincular um ou mais termos à sua postagem. Isso é o que o WordPress faz por padrão, e é isso que podemos mudar tornando uma taxonomia exclusiva: Faça a taxonomia personalizada se comportar como a taxonomia de categoria.
Forçando a Exclusividade nas Taxonomias
Quando criamos uma taxonomia personalizada com o método register_taxonomy()
, o WordPress adiciona uma meta box com seleção de vários itens à página de edição de postagem:
Usando esta caixa meta, um usuário pode escolher qualquer número de termos existentes (já usados) e também pode adicionar novos termos usando a caixa de texto.
Para criar uma taxonomia tipo categoria, onde cada post pertence a no máximo uma categoria de um conjunto de categorias predefinidas, você pode fazer isso ajustando um pouco o WordPress:
- Oculte a meta box padrão criada pelo WordPress.
- Crie uma meta box personalizada na página de edição de postagem que fornecerá controles para a seleção de um único item.
- Salve o valor da taxonomia quando a postagem for salva.
Vamos dar uma olhada em cada uma das etapas.
Ocultar a caixa meta padrão criada pelo WordPress
Para isso, precisamos definir as opções show_in_quick_edit
e meta_box_cb
para false
ao chamar register_taxonomy
.

A primeira opção oculta a taxonomia no painel de edição rápida/em massa e a segunda opção a oculta na página de edição de postagem:
register_taxonomy( 'custom_taxonomy', 'post', array( 'labels' => array( 'name' => 'Custom Exclusive Taxonomy' ), 'show_in_quick_edit' => false, 'meta_box_cb' => false ));
Quando a meta box padrão está oculta, os itens podem ser adicionados ao conjunto de termos disponíveis da taxonomia por meio da página de gerenciamento de taxonomia:
Crie uma Meta Box Personalizada na Página de Edição de Post
Para criar uma meta box personalizada, podemos usar o gancho add_meta_boxes
do WordPress. Você pode saber mais sobre o gancho aqui.
add_action('add_meta_boxes', 'add_custom_meta_box'); function add_custom_meta_box(){ add_meta_box( 'taxonomy_box', __('Custom Exclusive Taxonomy'), 'fill_custom_meta_box_content', 'post' ,'side'); }
Chamamos o método add_meta_box
com os seguintes argumentos:
-
taxonomy_box
– O ID da meta box -
__('Custom Exclusive Taxonomy')
– O título da caixa meta -
fill_custom_meta_box_content
– Uma função que é usada para preencher o conteúdo da meta box -
post
– Isso indica que a meta box deve aparecer na página de edição do post. -
side
– Indica o local onde a meta box deve ser inserida.
Observe como especificamos taxonomy_box
como o ID. No entanto, é a função no terceiro parâmetro que nos permitirá definir o que irá para a caixa.
Agora vamos implementar a função fill_custom_meta_box_content
:
<?php function fill_custom_meta_box_content( $post ) { $terms = get_terms( array( 'taxonomy' => 'custom_taxonomy', 'hide_empty' => false // Retrieve all terms )); // We assume that there is a single category $currentTaxonomyValue = get_the_terms($post->ID, 'custom_taxonomy')[0]; ?> <p>Choose taxonomy value</p> <p> <?php foreach($terms as $term): ?> <input type="radio" name="custom_taxonomy" value="<?php echo $term->term_id;?>"<?php if($term->term_id==$currentTaxonomyValue->term_id) echo "checked"; ?>> <label for="taxonomy_term_<?php echo $term->term_id;?>"><?php echo $term->name; ?></label> </input><br/> <?php endforeach; ?> </p> <?php }
Aqui, estamos primeiro recuperando todos os termos (ou seja, valores existentes) da taxonomia. Vamos usá-los para mostrar uma lista de controles de botão de opção.
Em seguida, recuperamos o termo de taxonomia atualmente selecionado usando a função get_the_terms()
—precisamos dele para selecionar o respectivo botão de opção.
Observe que esta função retorna um array. Isso ocorre porque, por padrão, a postagem pode ter qualquer número de termos associados a ela. Pela nossa suposição, o post tem no máximo um termo, então acessamos o primeiro elemento do array. (Tudo bem se a matriz estiver vazia; obteremos null
como o valor atual e nenhum botão de opção será selecionado.)
O código de emissão HTML usa custom_taxonomy
como o nome dos botões de opção e os IDs dos termos correspondentes como seus valores; Os atributos de ID de botão de opção são usados apenas para conectar a tags de rótulo. Como resultado, obtemos a seguinte meta box personalizada:
Salve o valor da taxonomia quando a postagem for salva
Finalmente, precisamos persistir o valor da taxonomia quando a postagem for salva. Para isso, podemos usar o gancho save_post
:
add_action('save_post', 'save_custom_taxonomy'); function save_custom_taxonomy($post_id){ if ( isset( $_REQUEST['custom_taxonomy'] ) ) wp_set_object_terms($post_id, (int)sanitize_text_field( $_POST['custom_taxonomy'] ), 'custom_taxonomy'); }
E é isso! Acabamos.
Agora você sabe como definir uma taxonomia personalizada que se comportará como a taxonomia de categoria integrada.
Observação: o WordPress aceitou uma solicitação de recurso para facilitar a alternância de exclusividade para taxonomias personalizadas. No entanto, o ticket não teve muita atividade por um tempo.
Embrulhar
As taxonomias são um recurso muito poderoso e útil no WordPress. Fora da caixa, eles não têm a capacidade de fazer uma categorização estrita de postagens, mas, como quase tudo no WordPress, as taxonomias e as funcionalidades relacionadas são extremamente personalizáveis. Isso nos permite adicionar essa habilidade muitas vezes necessária em poucos passos.
A abordagem apresentada aqui também pode ser usada para criar uma interface do usuário ainda mais personalizada em páginas de pós-edição para a seleção de termos de taxonomia.
Espero que você tenha achado útil este tutorial rápido sobre como definir taxonomias personalizadas exclusivas!