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?
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:
$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.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.
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.
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