the_title () mostra o título da primeira postagem em vez do título da página?

3

Ocasionalmente estou enfrentando esse problema e não tenho certeza do que causa isso, alguma idéia?

<?php get_header(); ?>
    <div class="content" role="main">
            <h1><?php the_title(); ?></h1>
            <?php get_template_part( 'loop', 'index' ); ?>
    </div>
<?php get_footer(); ?>

Para uma página normal, the_title retorna "Título da página".

Mas para um blog (usando loop.php como no arquivo de índice acima), ele retorna "Primeiro título dos posts".

Alguma idéia?

    
por Wordpressor 12.03.2013 / 20:30

4 respostas

7

the_title é uma tag de loop. Ele "Exibe ou retorna o título do post atual" e é suposto ser usado dentro do Loop, não fora dele.

O que você está fazendo - chamando-o fora do Loop - não está correto, e você está obtendo resultados inconsistentes. O que acontece é isto:

  1. A variável $post é definida para o primeiro post no loop muito cedo no carregamento da página. Para algumas páginas, como as páginas de postagens únicas que têm apenas uma postagem no Loop, isso significa que $post é "a página em que você está" - mais ou menos. Para páginas de arquivo, é a primeira página no Loop. Você pode colocar var_dump($post); antes de wp_head ser executado e ver que a variável já está definida.
  2. Tags como the_title usam essa variável global $post . Você tem que rastreá-lo através de algumas funções para chegar lá, mas eventualmente você chegar à função get_post e você pode ver na fonte que este é o caso. Nesse caso, a cadeia é the_title - > get_the_title - > get_post

Então, o que você está descrevendo é exatamente o que deveria estar acontecendo. Você está usando a tag incorretamente. Às vezes funciona do jeito que você quer apenas por causa de uma peculiaridade do código. Não é realmente suposto que funciona assim, ou assim parece-me.

Se você quiser "a página em que está", às vezes precisará usar get_queried_object , mas assista já que retorna diferentes tipos de dados dependendo da página e, para algumas páginas, retorna NULL . Em outros casos, é melhor usar as is_home , is_category , etc. condicionais do que você depende dos dados da consulta Curtiu isso. Na verdade, na maioria dos casos, você é melhor com essas condicionais ou apenas com uma ligação para wp_title , como toscho sugere , mas o contexto em que você está tentando usar isso me faz pensar se isso está correto. Além disso, a saída de wp_title pode ser, e freqüentemente é, manipulada por plugins (plugins de SEO, por exemplo), que podem ou não ser o que você deseja.

    
por s_ha_dum 12.03.2013 / 21:07
3

Em páginas de arquivo - blog, ano, categoria e assim por diante - use wp_title() para obter o título da página. the_title() confia nos dados de um único post.

    
por fuxia 12.03.2013 / 21:27
0

Em páginas de arquivo - blog, ano, categoria e assim por diante - use single_cat_title() para obter o título da página. Espero que isso ajude você

    
por Gince George 24.01.2017 / 09:37
-1

Basta acertar a mesma coisa hoje, mas encontrei uma ótima solução:

  <?php 
    if ( is_front_page() ) {
      echo "Home";
    } else if (is_single()) { // POST, not needed for my site
      echo "";
    } else if (is_page()) { // PAGE
      echo get_the_title();
    } else if(is_category()) {
      $arr = get_the_category();
      if ( ! empty( $arr ) ) {
        echo esc_html( $arr[0]->name );   
      }
    }
    
por Carsten Hagemann 15.06.2016 / 13:18

Tags