...

Como Tornar a Seleção de Categoria Obrigatória no WordPress

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:

  1. Impedirá a publicação: Se o post não tiver categoria, ele será salvo como rascunho.
  2. 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:

  1. add_action('save_post', ...): Este hook é acionado sempre que um post é salvo (atualizado ou criado).
  2. 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.
  3. remove_action(...) e add_action(...): Isso é crucial para evitar um loop infinito, pois wp_update_post dispara o save_post novamente. Removemos a ação antes de atualizar o post e a reativamos depois.
  4. wp_get_post_categories($post_id): Obtém as categorias associadas ao post.
  5. if (empty($categorias)): Se a lista de categorias estiver vazia, significa que nenhuma foi selecionada.
  6. wp_update_post([... 'post_status' => 'draft']): Altera o status do post de volta para “rascunho”, impedindo a publicação.
  7. add_filter('redirect_post_location', ...): Adiciona um parâmetro categoria_obrigatoria=true à URL de redirecionamento após o salvamento. Este parâmetro será usado para exibir a mensagem.
  8. 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:

  1. Crie um novo post.
  2. Não selecione nenhuma categoria.
  3. Tente “Publicar” ou “Atualizar”.
  4. 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.

outros posts

Seraphinite AcceleratorOptimized by Seraphinite Accelerator
Turns on site high speed to be attractive for people and search engines.