Tabelas de lista de administração do WordPress: adicionar filtros personalizados

Publicados: 2021-02-26

A maioria das informações em suas páginas e postagens no WordPress Admin é organizada em tabelas. Qualquer um que use o WordPress estará familiarizado com isso. Eles funcionam bem e permitem que você faça 'Edições Rápidas' de determinada página ou informação de postagem, mostre a data em que a postagem ou página foi publicada e muito mais. Além disso, você deve ter notado que pode filtrar essas tabelas com uma seleção de menus suspensos que aparecem na parte superior de cada tabela.

Há apenas um punhado de filtros no entanto. Então, o que você faz se quiser filtrar um valor que não possui uma caixa de filtro no Admin? Felizmente o WordPress nos permite adicionar nossos próprios filtros. Nós vamos ver como.

Por que usar filtros personalizados ?

Então, por que exatamente você precisa de filtros personalizados para organizar as tabelas de administração no WordPress? Vamos imaginar que temos um site que tem um grande número de Post Authors e muitos posts.

Hospede seu site com a Pressidium

GARANTIA DE DEVOLUÇÃO DO DINHEIRO DE 60 DIAS

VEJA NOSSOS PLANOS

Você pode visualizar o autor das postagens na tabela Admin sem nenhuma modificação. O que você não pode fazer atualmente é classificar as postagens por autor. Claramente, essa é uma limitação significativa se você quiser visualizar facilmente todas as postagens escritas por um autor específico. O que ajudaria é se você pudesse visualizar um menu suspenso de todos os autores do Post e, em seguida, selecionar um da lista. Isso poderia realmente acelerar as coisas.

Vamos dar uma olhada em como podemos construir isso.

Criando nosso filtro personalizado

Para ajudá-lo a criar seus próprios filtros, o WordPress fornece os ganchos restrict_manage_posts e pre_get_posts .

restrict_manage_posts é introduzido no arquivo wp-admin/includes/class-wp-posts-list-table.php em torno da linha 557 e é acionado antes que o botão Filter seja criado acima da lista da tabela admin.

Usaremos uma função personalizada e a vincularemos com o hook restrict_manage_posts como de costume (dê uma olhada aqui para mais informações sobre isso). Vá para a pasta principal do seu tema ativo e abra o arquivo functions.php com seu editor favorito. Ao final do conteúdo do arquivo insira o código abaixo:

 function my_author_filter(){ $screen = get_current_screen(); global $post_type; if( $screen->id == 'edit-post' ){ $my_args = array( 'show_option_all' => 'All Authors', 'orderby' => 'display_name', 'order' => 'ASC', 'name' => 'authors_admin_filter', 'who' => 'authors', 'include_selected' => true ); if(isset($_GET['authors_admin_filter'])){ $my_args['selected'] = (int)sanitize_text_field($_GET['authors_admin_filter']); } wp_dropdown_users($my_args); } } add_action('restrict_manage_posts','my_author_filter');

A principal condição que usamos é if( $screen->id == 'edit-post') . Aqui usamos a função do WordPress get_current_screen() que retorna o id da tela em que estamos.

Neste caso, o ID da tela do administrador é 'edit-post'. Em outras palavras, garantimos que estamos na tela de administração de postagens. Se, por exemplo, quisermos aplicar isso à tela de administração das páginas, devemos usar if( $screen->id == 'edit-page' ou se estivéssemos trabalhando para um tipo de postagem personalizado, o edit-{post_type} seria a instrução if correta.

Nota: Para ver qual ID corresponde a cada tela de administração, você pode verificar a documentação oficial sobre a referência da tela de administração.

No código abaixo verificamos se um autor já está selecionado e se sim, aplicamos o valor selecionado:

 if(isset($_GET['authors_admin_filter'])){ $my_args['selected'] = (int)sanitize_text_field($_GET['authors_admin_filter']); }

Por fim, usando a função wp_dropdown_users do WordPress, geraremos a lista suspensa dos autores de acordo com os argumentos que definimos anteriormente.

Em seguida, escolhemos o texto que exibirá a opção 'show-all' no argumento show_option_all . Escolhemos a string “Todos os autores”. No argumento 'name', preenchemos o nome desejado para a lista suspensa. Usaremos esse valor posteriormente para filtrar os resultados da lista de postagens.

No argumento 'quem' definimos qual tipo de usuário consultar, no nosso caso 'autores'. Com o argumento 'include_selected', escolhemos se queremos incluir o ID do usuário selecionado na lista suspensa.

Neste ponto, se você atualizar a tela de postagens do administrador, deverá ver o menu suspenso do autor ao lado dos outros menus de filtro integrados.

Se você selecionar um valor e pressionar “Filtro”, o valor permanecerá selecionado após o recarregamento da página, mas os resultados permanecerão inalterados. Em nossa próxima etapa, faremos as alterações necessárias para filtrar a lista de postagens para mostrar apenas as postagens vinculadas ao autor que selecionamos.

Filtrando os resultados

Mais uma vez, o filtro pre_get_posts fará o trabalho. Examinamos esse gancho em nosso artigo WordPress Admin Search: Extending the Results. Usaremos isso novamente para alterar o objeto de variável de consulta que é criado na tela de pós-administração, antes que a consulta real seja executada. Em seu functions.php insira as seguintes linhas:

 function my_author_filter_results($query){ $screen = get_current_screen(); global $post_type; if ( $screen->id == 'edit-post' ) { if(isset($_GET['authors_admin_filter'])){ $author_id = sanitize_text_field($_GET['authors_admin_filter']); if($author_id != 0){ $query->query_vars['author'] = $author_id; } } } } add_action('pre_get_posts','my_author_filter_results');

A condição principal, como anteriormente, é necessária aqui também para garantir que estamos na tela de postagens do administrador.

O $author_id = sanitize_text_field($_GET['authors_admin_filter']); mantém o id do autor selecionado na variável $author_id . Depois disso, e se o id do autor não for 0 (todos os autores estão selecionados), passamos o valor $author_id no parâmetro author da consulta.

E é isso. Agora as postagens mostradas serão apenas as que pertencem ao autor/id de usuário selecionado.

Conclusão

A filtragem personalizada nas telas do administrador pode tornar seu conteúdo facilmente pesquisável pelos usuários do administrador, algo que pode ser inestimável quando você tem muitas postagens ou páginas. E, claro, esta é apenas uma maneira possível de usar um filtro nas tabelas Admin. Há uma tonelada de maneiras alternativas que você pode achar útil e esperamos que as técnicas que descrevemos aqui o ajudem a criar seus próprios filtros.

Por exemplo, você pode criar um menu de filtro suspenso com as opções para mostrar as postagens criadas nos últimos 30 dias ou talvez um filtro que classifique as postagens por qualquer taxonomia. A lista query_vars pode ajudá-lo a pensar em opções possíveis!.

Divirta-se brincando com este ótimo recurso!

Veja também

Tabelas de lista de administração do WordPress: adicionar filtros personalizados
Introdução aos campos personalizados do WordPress