我偶尔会遇到这个问题,不知道是什么原因造成的,有什么想法吗?
<?php get_header(); ?>
<div class="content" role="main">
<h1><?php the_title(); ?></h1>
<?php get_template_part( \'loop\', \'index\' ); ?>
</div>
<?php get_footer(); ?>
对于普通页面,\\u title返回“页面标题”。
但对于博客(使用上面索引文件中的loop.php),它会返回“First posts title”。
有什么想法吗?
最合适的回答,由SO网友:s_ha_dum 整理而成
the_title
是循环标记。它“显示或返回当前帖子的标题”,应该在循环内部使用,而不是在循环外部使用。
你所做的——在循环外调用它——并不完全正确,你得到的结果不一致。结果是:
在$post
变量在页面加载的早期就设置为循环中的第一个帖子。对于某些页面,例如循环中只有一篇文章的单篇文章页面,这意味着$post
是“你所在的页面”——或多或少。对于归档页面,它是循环中的第一个页面。你可以把var_dump($post);
之前wp_head
运行并查看变量是否已设置
标签,如the_title
使用该全局$post
变量您必须通过几个函数来跟踪它,但最终您可以get_post
功能,您可以see in the source 事实就是这样。在这种情况下,链条是the_title
->get_the_title
->get_post
所以,你所描述的正是应该发生的事情。您使用的标记不正确。它有时会以您想要的方式工作,只是因为代码有一个怪癖。它不应该真的那样工作,至少在我看来是这样的。如果你想要“你所在的页面”,你有时需要使用get_queried_object
, 但请注意,因为它会根据页面返回不同类型的数据,对于某些页面,它会返回不同类型的数据NULL
. 在其他情况下,您最好使用is_home
, is_category
, etc. conditionals 而不是依赖于这样的查询数据。事实上,在大多数情况下,使用这些条件或只需调用wp_title
正如托肖所建议的,但你试图在其中使用这个词的上下文让我怀疑这是否正确。加上wp_title
可以并且经常被插件(例如SEO插件)操纵,这可能是您想要的,也可能不是您想要的。