Single.php – Obter categoria pai atual

O problema

Estou tentando exibir o título atual da categoria pai com o título do post diretamente. O problema é que não consigo obter a categoria atual de posts dentro ou fora do loop. Posso obter uma lista de categorias pai. Por exemplo, se eu tiver uma publicação em 3 categorias diferentes e eu navegador para a publicação única nessas categorias, eu quero que ela exiba o nome da categoria atual na parte superior, e não apenas a primeira [0] categoria em que está.


O exemplo

Test Post está nas categorias: Cat1, Cat2

Eu vou ver o Test Post no Cat1 ele deve exibir o Cat1 - Test Post

Eu vou ver o Test Post em Cat2 ele deve exibir Cat2 - Test Post


Tentativa e erro

get_the_category() retorna as duas categorias: Cat1, Cat2

$post->post_parent sempre retorna 0

echo $category[0]->name; Obviamente, apenas retornaremos a categoria mais alta – Cat1

Solutions Collecting From Web of "Single.php – Obter categoria pai atual"

A resposta muito ampla para o porquê isso não funciona é que a internet é apátrida . Basicamente, cada solicitação de uma página é uma instância separada e exclusiva de outros pedidos de página.

Exemplo

Digamos que o post-1 está na categoria-1 e categoria-2 .

Quando WordPress carrega post-1 em single.php não tem como saber como o usuário chegou à página. Só sabe que tanto a categoria-1 como a categoria-2 estão associadas à postagem.

Não é possível obter a “categoria atual” porque não está mais em uma categoria.

Esse comportamento também cria confusão com breadcrumbs no WordPress. O caminho de navegação do usuário pode parecer assim.

 Step 1. Home Step 2. Home->category-1 Step 3. Home->post-1 

O comportamento esperado é muitas vezes para o último passo para se parecer com isso.

 Step 3. Home->category-1>post-1 

Mas se isso funcionasse, isso também funcionaria.

 Step 3. Home->category-2->post-1 

E isso seria ruim para os motores de busca porque agora a mesma publicação possui dois URLs diferentes.

Contudo

Se você realmente deseja mostrar a categoria de que o usuário veio, você poderia tentar algo assim. Lembre-se, a internet é apátrida, então você precisa de uma maneira de passar informações de uma página para outra.

Modelo de categoria

Na category.php você pode alterar seu permalink para a única publicação e include um parâmetro de string de consulta na forma de ?category=id . Isso pode parecer algo assim.

 < ?php $cat_obj = get_category( get_query_var( 'cat' ) ); $cat_id = ( $cat_obj ? $cat_id = $cat_obj->term_id : $cat_id = '' ); ?> < ?php the_title(); ?> 

Seu permalink deve agora se parecer com algo assim, onde ?c=19 é anexado ao permalink normal.

 http://www.example.com/post-name/?c=19 

Modelo único

Em single.php você precisa pegar a categoria ID da string de consulta, obter o nome da categoria e depois exibir na página. O código para isso pode parecer assim.

Você quer verificar se o parâmetro da seqüência de consulta está configurado. Se for, use esc_html() para desinfetá-lo por segurança, então verifique se é numérico e não é algo como “blá”.

Uma vez concluída a validação, obtenha o nome e a saída da categoria na página.

 if ( isset( $_GET['c'] ) ) { $cat_id = (integer) esc_html( $_GET['c'] ); if ( is_numeric( $cat_id ) ) { $cat_obj = get_category($cat_id); $cat_name = $cat_obj->name; echo '' . $cat_name . ''; } } 

Ressalvas

Se o parâmetro de seqüência de consulta não existir, nenhuma categoria será exibida. Existem muitas maneiras pelas quais um usuário pode chegar a uma única página de publicação e isso só lida com um caso de uso muito específico.

Isso também pode afetar negativamente o SEO se o mecanismo de pesquisa perceber que existem vários URLs únicos para o mesmo conteúdo exato.