Skip to content

Tudo para WordPress, desenvolvimento web — e não só

⌨️ Como adicionar um menu suspenso de autor no ecrã Todos os artigos no WordPress

⌨️ Como adicionar um menu suspenso de autor no ecrã Todos os artigos no WordPress

O filtro predefinido «Mine» no ecrã «All Posts» do WordPress mostra apenas as publicações do utilizador atual. Isto funciona enquanto for o único autor. Mas quando três editores, cinco colaboradores e um par de especialistas convidados trabalham no site, descobrir quem escreveu o quê transforma-se num exercício de percorrer uma tabela interminável.

A interface nativa do WordPress não oferece um menu suspenso de autores ao lado dos filtros de data e categoria. Os programadores limitaram deliberadamente o ecrã, assumindo que o filtro «Mine» é suficiente para os administradores. Na prática, isto é catastroficamente insuficiente.

Pode adicionar um menu suspenso de autores sem um plugin, usando um simples fragmento de PHP. O código liga-se aos hooks nativos de administração e não entra em conflito com outros filtros. O menu suspenso de autores funciona em conjunto com o botão nativo «Filter».

💡 Visão geral rápida:

  • Registamos o hook admin_init para que o código funcione apenas no painel de administração e não afete o frontend
  • Produzimos wp_dropdown_users() via restrict_manage_posts para que o seletor apareça na linha de filtros, ao lado da data e categoria
  • Limitamos o âmbito através de get_current_screen() apenas a publicações e páginas, deixando os CPT intocados
  • O autor selecionado é recordado via get_query_var('author') e funciona em conjunto com os outros filtros

Como funciona nos bastidores

O WordPress renderiza os filtros nos ecrãs de lista através do hook restrict_manage_posts. Ele é acionado imediatamente antes do botão «Filter» na tabela de publicações e páginas. Tudo o que for produzido dentro deste hook passa a fazer parte da linha de filtros, tal como os menus suspensos de data e categoria do sistema.

A função wp_dropdown_users() é a API nativa do WordPress para gerar um seletor HTML com utilizadores. Aceita um array de argumentos: lista de utilizadores, valor predefinido, classe CSS, e devolve um <select> pronto a usar. Sem marcação manual ou consultas diretas à base de dados.

Combinar estas duas ferramentas dá-lhe uma interface nativa indistinguível dos filtros nativos do WordPress.

Código: adicionar o menu suspenso de autores

Insira o fragmento no ficheiro functions.php do tema ativo ou através de um plugin de fragmentos de código (por exemplo, Code Snippets). O código regista um hook no evento admin_init e produz o seletor de autores nos ecrãs de publicações e páginas.

1add_action('admin_init', 'tsd_author_dropdown_init');
2function tsd_author_dropdown_init() {
3 add_action('restrict_manage_posts', 'tsd_author_dropdown');
4}
5function tsd_author_dropdown() {
6 if ($GLOBALS['pagenow'] !== 'edit.php') {
7 return;
8 }
9 $screen = get_current_screen();
10 if (empty($screen)
11 || ($screen-&gt;id !== 'edit-page' && $screen-&gt;id !== 'edit-post')
12 ) {
13 return;
14 }
15 wp_dropdown_users(array(
16 'show_option_all' => 'All Authors',
17 'selected' => get_query_var('author', 0),
18 'name' => 'author'
19 ));
20}

O que cada parte faz:

admin_init aciona o registo apenas no painel de administração. O frontend não é afetado, sem carga extra.

restrict_manage_posts produz o seletor na linha de filtros, exatamente onde estão localizados os filtros de data e categoria. O menu suspenso aparece tanto no ecrã de publicações como no de páginas.

$GLOBALS['pagenow'] verifica se estamos na página de lista de publicações (edit.php). Se o utilizador for para as definições ou editar uma publicação específica, o código termina silenciosamente.

get_current_screen() clarifica o tipo de conteúdo. O fragmento funciona apenas para post e page padrão, ignorando tipos de conteúdo personalizados (cpt). Esta é uma limitação deliberada: a maioria dos CPT de plugins de terceiros não usa autores para diferenciação de conteúdo.

wp_dropdown_users() gera o seletor HTML. O argumento 'show_option_all' define o texto para a opção «mostrar todos os autores», 'selected' via get_query_var('author') recorda o utilizador selecionado após a filtragem, e 'name' => 'author' garante que o WordPress reconhece o parâmetro como um filtro de autor e o processa com uma consulta padrão.

Menu pendente de autores no ecrã Todos os Artigos do WordPress

Depois de inserir o código, o menu suspenso aparece nos ecrãs «All Posts» e «All Pages» ao lado dos filtros nativos. O botão «Filter» funciona como habitualmente. Pode filtrar simultaneamente por autor, data e categoria, e o WordPress irá cruzar corretamente as condições.

Afinação: o que pode alterar

O fragmento é intencionalmente mínimo, mas o wp_dropdown_users() suporta dezenas de parâmetros. Pode adaptar quase tudo ao seu cenário.

Alterar o texto «All Authors». Substitua 'show_option_all' pela sua própria variante, por exemplo, 'Все авторы' ou 'Любой автор'.

Excluir utilizadores específicos. O parâmetro 'exclude' aceita um array de IDs. Útil se houver contas de sistema entre os utilizadores que não devem aparecer na lista:

1'exclude' => array(1, 15, 23),

Mostrar apenas determinados perfis. O parâmetro 'role__in' filtra os utilizadores por perfil. Por exemplo, apenas autores e editores:

1'role__in' => array('author', 'editor'),

Ordenação não alfabética. Por predefinição, 'orderby' => 'display_name'. Pode substituí-lo por 'ID', 'user_login' ou 'post_count'. A última opção mostrará os autores mais ativos no topo.

Adicionar a outros tipos de conteúdo. Remova a verificação $screen->id e o menu suspenso aparecerá em todos os ecrãs edit.php, incluindo tipos de conteúdo personalizados. Ou adicione CPT específicos à condição:

1$allowed = array('edit-post', 'edit-page', 'edit-product');
2if (!in_array($screen->id, $allowed, true)) {
3 return;
4}

⁉️🤔 Perguntas frequentes

O fragmento funciona com o Gutenberg e o Classic Editor em simultâneo?

Sim. O código não mexe no editor, apenas modifica as listas de administração, que não dependem do editor escolhido. O fragmento funciona de forma idêntica no Gutenberg, no Classic Editor e em qualquer page builder. Testado no WordPress 6.4-6.7 com o Gutenberg ativo e sem ele. O hook restrict_manage_posts existe desde a versão 2.1 e não mudou em termos de compatibilidade. O código funcionará em qualquer versão moderna do WordPress.

Preciso de limpar a cache depois de inserir o código?

Não. Os hooks do WordPress são registados em tempo real a cada pedido ao painel de administração. Basta atualizar a página de lista de publicações. Se usar caching do lado do servidor (Redis, Varnish), isso não afeta o painel de administração, que é excluído do caching por predefinição.

Posso adicionar o menu suspenso de autores sem acesso ao functions.php?

Sim, através de um plugin de fragmentos de código. Os plugins gratuitos Code Snippets, WPCode ou FluentSnippets funcionarão. Insira o código como um fragmento PHP com início automático e funcionará da mesma forma que no functions.php. A vantagem de um gestor de fragmentos é que um erro de código não fará o site cair. O plugin irá capturar o erro fatal e desativar o fragmento.

Porque é que o menu suspenso não aparece no ecrã de um tipo de conteúdo personalizado?

O fragmento está deliberadamente limitado aos ecrãs edit-post e edit-page. Para adicionar CPT, expanda a condição na verificação $screen->id (consulte a secção «Afinação»). Nota: para CPT registados sem suporte a autor ('supports' => array('author')), a filtragem por autor não funcionará, mesmo com o menu suspenso presente.

O fragmento entra em conflito com plugins como Admin Columns ou Adminimize?

Não. Estes plugins funcionam noutros hooks e modificam as colunas da tabela, não a linha de filtros. O restrict_manage_posts adiciona o seletor antes do botão «Filter», numa zona que os plugins de colunas não tocam. Em três anos de utilização em sites com múltiplos autores, não foram registados conflitos.

Vale a pena adicionar o menu suspenso de autores ao seu site

Se mais de duas pessoas publicam no site, definitivamente sim. O filtro «Mine» mostra as publicações do utilizador atual, mas não permite mudar para os artigos de um colega. O menu suspenso de autores fecha esta lacuna sem plugins e sem carga na base de dados. O wp_dropdown_users() faz uma consulta via get_users(), que o WordPress coloca em cache.

Para um blogue individual, o filtro não faz sentido. É o único autor, de qualquer forma. Mas assim que aparecer uma segunda pessoa, o tempo poupado com a filtragem instantânea compensa os três minutos gastos a inserir o código.

Copie o fragmento para o functions.php ou via Code Snippets, atualize a página de lista de publicações e verifique a filtragem por autor em conjunto com o filtro de data. Se precisar de adaptar à sua estrutura de perfis e tipos de conteúdo, os parâmetros role__in, exclude e orderby dão-lhe controlo total sobre o conteúdo da lista sem plugins adicionais.