web-dev-qa-db-fra.com

the_title () affiche le titre du premier message au lieu du titre de la page?

Je suis occasionnellement confronté à ce problème et je ne suis pas sûr de ce qui le cause, des idées?

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

Pour une page normale, the_title renvoie "Titre de la page".

Mais pour un blog (en utilisant loop.php comme dans le fichier d'index ci-dessus), il retourne "First posts title".

Des idées?

3
Wordpressor

the_title est une balise Loop. Il "Affiche ou retourne le titre du message en cours" et il est censé être utilisé inside the Loop, pas en dehors de celle-ci.

Ce que vous faites - l'appelez en dehors de la boucle - n'est pas tout à fait correct et vous obtenez des résultats incohérents. Qu'est-ce qui se passe est la suivante:

  1. La variable $post est définie sur la première publication de la boucle très tôt dans le chargement de la page. Pour certaines pages, comme les publications uniques qui ne comportent qu'une publication dans la boucle, cela signifie que $post est "la page sur laquelle vous vous trouvez" - plus ou moins. Pour les pages d'archives, il s'agit de la première page de la boucle. Vous pouvez mettre var_dump($post); avant que wp_head s'exécute et vérifier que la variable est déjà définie.
  2. Des balises comme the_title utilisent cette variable globale $post. Vous devez le suivre à travers quelques fonctions pour y arriver, mais vous finissez par arriver à la fonction get_post et vous pouvez voir dans le source que c'est le cas. Dans ce cas, la chaîne est the_title-> get_the_title-> get_post

Donc, ce que vous décrivez est exactement ce qui devrait se passer. Vous utilisez la balise de manière incorrecte. Cela fonctionne parfois comme vous le souhaitez uniquement à cause d'une anomalie du code. Ce n'est pas vraiment supposé fonctionner de cette façon, du moins me semble-t-il.

Si vous voulez "la page sur laquelle vous vous trouvez", vous devrez parfois utiliser get_queried_object , mais surveillez-le car il renvoie différents types de données en fonction de la page et, pour certaines pages, renvoie NULL. Dans d'autres cas, il vaut mieux utiliser les is_home, is_category, etc. conditionals que vous dépendez des données de requête de ce type. En fait, dans la plupart des cas, il vaut mieux utiliser ces conditionnels ou simplement un appel à wp_title comme le suggère toscho, mais le contexte dans lequel vous essayez de l'utiliser me fait me demander si cela est correct. De plus, la sortie de wp_title peut être manipulée fréquemment par des plugins (plugins SEO, par exemple), ce qui peut être ou ne pas être ce que vous voulez.

7
s_ha_dum

Sur les pages d'archives - blog, année, catégorie, etc. - utilisez wp_title() pour obtenir le titre de la page. the_title() s'appuie sur les données d'un seul poste.

3
fuxia

Sur les pages d'archives - blog, année, catégorie, etc. - utilisez single_cat_title() pour obtenir le titre de la page. J'espère que cela vous aide

0
Gince George