H1: Impede Publicação sem Categoria: Validação Obrigatória no WordPress
Você já se viu com posts publicados no seu site WordPress que acabaram na temida categoria “Sem categoria” (Uncategorized)? Isso é um problema comum que pode bagunçar a organização do seu conteúdo, confundir seus visitantes e, pior, prejudicar o SEO do seu site. Neste artigo, vamos aprender como forçar a seleção de uma categoria antes que qualquer post seja publicado, garantindo que todo o seu conteúdo esteja sempre no lugar certo.
O Problema: Posts “Sem Categoria” e Seus Impactos
Por padrão, o WordPress é muito permissivo. Se um autor esquece ou decide não atribuir uma categoria a um novo post, o sistema automaticamente o move para a categoria padrão (geralmente “Sem categoria” ou “Uncategorized”). Embora isso evite um erro técnico, gera uma série de problemas:
- Má Organização: Seu conteúdo fica espalhado, dificultando a navegação dos usuários e a gestão interna.
- Prejuízo ao SEO: Páginas de categoria “Sem categoria” não adicionam valor real para os motores de busca e podem ser vistas como de baixa qualidade. Além disso, posts sem uma classificação clara perdem parte do “poder” de SEO que teriam se estivessem em categorias relevantes.
- Experiência do Usuário (UX) Ruim: Visitantes que buscam conteúdo por categoria podem encontrar resultados irrelevantes ou perder artigos importantes.
- Manutenção Futura: Organizar centenas de posts “sem categoria” depois de um tempo é um pesadelo!
A Solução: Validação de Back-end para Seleção Obrigatória
A forma mais robusta de garantir que nenhum post seja publicado sem uma categoria é através de uma validação no back-end do WordPress. Isso significa que, mesmo que um usuário tente “burlar” o sistema (por exemplo, se você já implementou a troca de checkboxes por radio buttons, como mostramos em nosso artigo anterior), o WordPress irá intervir e exigir a seleção de uma categoria.
Nosso snippet fará duas coisas:
- Impedirá a publicação: Se o post não tiver categoria, ele será salvo como rascunho.
- Exibirá um aviso claro: Uma mensagem de erro aparecerá no painel informando ao usuário a necessidade de escolher uma categoria.
O Código: Forçando a Seleção de Categoria Antes de Publicar
Para implementar essa validação, adicione o seguinte código ao arquivo functions.php do seu tema filho ou utilize um plugin de snippets:
/** * Torna a seleção de categoria obrigatória para posts. * Impede a publicação sem categoria e exibe um aviso. * * @link https://exemplo.com.br/blog/categoria-obrigatoria-wordpress */ // Ação para verificar categorias ao salvar o post add_action('save_post', function($post_id, $post, $update) { // Aplica apenas para posts (e não para páginas ou Custom Post Types) if ($post->post_type !== 'post') { return; } // Ignora posts salvos automaticamente (auto-draft) e revisões if (defined('DOING_AUTOSAVE') && DOING_AUTOSAVE) { return; } if (wp_is_post_revision($post_id)) { return; } // Evita loop infinito de salvamento desativando e reativando o hook remove_action('save_post', __FUNCTION__, 10, 3); // Recupera as categorias do post $categorias = wp_get_post_categories($post_id); // Se não houver nenhuma categoria selecionada if (empty($categorias)) { // Altera o status do post para 'rascunho' wp_update_post([ 'ID' => $post_id, 'post_status' => 'draft' ]); // Adiciona um parâmetro à URL de redirecionamento para exibir a mensagem de erro add_filter('redirect_post_location', function($location) { return add_query_arg('categoria_obrigatoria', 'true', $location); }); } // Reativa o hook para futuras ações de salvamento add_action('save_post', __FUNCTION__, 10, 3); }, 10, 3); // Prioridade 10, aceita 3 argumentos (ID, post_objeto, is_update) // Ação para exibir a mensagem de erro no painel administrativo add_action('admin_notices', function() { // Verifica se o parâmetro 'categoria_obrigatoria' está presente na URL if (isset($_GET['categoria_obrigatoria']) && $_GET['categoria_obrigatoria'] === 'true') { ?> <div class="notice notice-error is-dismissible"> <p><strong>🚨 Atenção: Você precisa escolher pelo menos uma categoria antes de publicar o post!</strong> O post foi salvo como rascunho.</p> </div> <?php } });Como o código funciona:
add_action('save_post', ...): Este hook é acionado sempre que um post é salvo (atualizado ou criado).- Verificações Iniciais: Garante que o código só atue em posts (e não em páginas ou outros tipos de conteúdo) e ignore salvamentos automáticos ou revisões para evitar comportamento indesejado.
remove_action(...)eadd_action(...): Isso é crucial para evitar um loop infinito, poiswp_update_postdispara osave_postnovamente. Removemos a ação antes de atualizar o post e a reativamos depois.wp_get_post_categories($post_id): Obtém as categorias associadas ao post.if (empty($categorias)): Se a lista de categorias estiver vazia, significa que nenhuma foi selecionada.wp_update_post([... 'post_status' => 'draft']): Altera o status do post de volta para “rascunho”, impedindo a publicação.add_filter('redirect_post_location', ...): Adiciona um parâmetrocategoria_obrigatoria=trueà URL de redirecionamento após o salvamento. Este parâmetro será usado para exibir a mensagem.add_action('admin_notices', ...): Exibe um banner de erro vermelho no topo do editor de posts, alertando o usuário que a categoria é obrigatória e que o post foi salvo como rascunho.
Testando a Implementação
Após adicionar o snippet:
- Crie um novo post.
- Não selecione nenhuma categoria.
- Tente “Publicar” ou “Atualizar”.
- O post deverá voltar para o status “Rascunho”, e você verá uma mensagem de erro no topo da tela.
Dica de SEO: Conteúdo Organizado é Conteúdo Otimizado
Forçar a seleção de categorias é mais do que uma questão de organização interna; é uma estratégia de SEO fundamental. Conteúdos bem categorizados ajudam os robôs de busca a entender a estrutura do seu site e a relevância de cada página. Isso pode resultar em:
- Melhor Indexação: O Google indexa seu conteúdo de forma mais eficiente.
- Melhor Ranqueamento: Posts em categorias claras têm mais chances de ranquear para palavras-chave específicas.
- Sitelinks no Google: Um site bem estruturado pode ser recompensado com sitelinks nos resultados de busca.
Conclusão: Um WordPress Mais Robusto e Otimizado
Com este snippet, você adiciona uma camada importante de validação ao seu WordPress, garantindo que o conteúdo esteja sempre bem classificado. Isso melhora não apenas a experiência de quem cria o conteúdo, mas também a de quem o consome, e otimiza o seu site para os motores de busca. Um pequeno ajuste no código pode ter um grande impacto na qualidade e no desempenho do seu site.