
⌨️ 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_initpara que o código funcione apenas no painel de administração e não afete o frontend - Produzimos
wp_dropdown_users()viarestrict_manage_postspara 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.
1 add_action('admin_init', 'tsd_author_dropdown_init'); 2 function tsd_author_dropdown_init() { 3 add_action('restrict_manage_posts', 'tsd_author_dropdown'); 4 } 5 function tsd_author_dropdown() { 6 if ($GLOBALS['pagenow'] !== 'edit.php') { 7 return; 8 } 9 $screen = get_current_screen(); 10 if (empty($screen) 11 || ($screen->id !== 'edit-page' && $screen->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.

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'); 2 if (!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_postsexiste 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-posteedit-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_postsadiciona 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.



