Login
Andre Publicado em 29/04/2021
ACF Snippets

Como visualizar termos de taxonomia do usuário no ACF

O ACF Pro permite que você mostre uma taxonomia na página dos usuários.

Fiz isso recentemente em um projeto que precisava configurar níveis de permissões para os usuários do WordPress.

Então criei uma taxonomia customizada chamada “permissao” e utilizei o ACF para mostrar essa nova taxonomia na página dos usuários.

// Criar taxonomia: permissão add_action( 'init', 'permissao_taxonomia', 0 ); function permissao_taxonomia() { $labels = [ 'name' => 'Permissões', 'singular_name' => 'Permissão', 'search_items' => 'Procurar Permissões', 'all_items' => 'Todas as Permissões', 'parent_item' => 'Permissão Pai', 'parent_item_colon' => 'Permissão Pai:', 'edit_item' => 'Editar Permissão' , 'update_item' => 'Atualizar Permissão', 'add_new_item' => 'Adicionar Nova Permissão', 'new_item_name' => 'Nova Permissão', 'menu_name' => 'Permissões' ]; register_taxonomy( 'permissao', null, [ 'hierarchical' => true, 'labels' => $labels, 'show_ui' => true, 'show_admin_column' => true, 'show_in_rest' => true, 'query_var' => true, 'rewrite' => ['slug' => 'permissao'], ]); }
Code language: PHP (php)

Quando acessei a página do usuário, tudo certo – as permissões criadas estavam lá, podendo selecionar várias em formato de checkbox e ao atualizar o perfil, as permissões foram salvas corretamente.

Tentei de várias maneiras, mas não consegui puxar uma array mostrando todas as permissões salvas do usuário.

A documentação do ACF também não ajudou muito nesse sentido…

Até que encontrei uma postagem em referência ao tutorial de Justin Tadlock que me mostrou a função de WordPress get_objects_in_term().

Essa função recebe 2 parâmetros:

  1. O ID do termo da taxonomia que quiser (ex: o termo de permissão “básico” seria 23)
  2. A taxonomia em questão: “permissao”

Fiz o teste e a função get_objects_in_term( 23, ‘permissao’ ) retornou uma array que continha o ID do usuário que tinha a opção “básico” assinalada.

Pronto, consegui ter um norte para seguir!

Ativei o modo programador (que de vez em quando vem em mim 😅) e criei a seguinte função:

// Verificar termos de taxonomia do usuário atual function termos_taxonomia_usuario( $taxonomia = null ) { // Cancelar se a taxonomia for nula if( $taxonomia == null ) return; // Pegar todas as permissões cadastradas $permissoes = get_terms([ 'taxonomy' => $taxonomy, 'hide_empty' => false ]); // Criar lista apenas com IDs das permissões cadastradas $listaPermissoes = []; foreach( $permissoes as $item ) : $listaPermissoes[] = $item->term_id; endforeach; // Pegar ID do usuário atual $usuario = get_current_user_id(); // Verificar os IDs que o usuário atual tem permissão $permissoesUsuario = []; foreach( $listaPermissoes as $idPermissao ) : if( in_array( $usuario, get_objects_in_term( $idPermissao, $taxonomia ) ) ) : $permissoesUsuario[] = $idPermissao; endif; endforeach; return $permissoesUsuario; }
Code language: PHP (php)

Pronto! Agora eu só precisava utilizar a função termos_taxonomia_usuario( ‘permissao’ ) para obter uma array com todas as permissões assinaladas na página do usuário – e assim fazer toda a lógica necessária no projeto.

Deixe uma resposta

O seu endereço de e-mail não será publicado. Campos obrigatórios são marcados com *