我在header.php,footer.php,single.php等中尝试了以下功能。
var_dump(in_the_loop());
var_dump(get_the_id());
第一个函数给出false(意味着我们不在循环中),第二个函数每次都给出post id。
来自wordpress的get_the_id()
说明:
检索当前帖子的数字ID。此标记必须在The Loop中。
我只想简单解释一下,如果我把这个函数调出循环,为什么我会得到帖子ID?
答案 0 :(得分:2)
必须对于get_the_id()来说有点强大...... 为Wordpress提供邪恶的眼睛。
它适用于标题和非循环(已确认)。
请注意,帖子/页面在此对话中基本上可以互换。
以这种方式思考WP - >除非你做了奇怪的事情或谈论非页面边缘情况,否则你总是以某种方式,每个页面都有一个帖子ID。当您在安装根目录(例如site.com/)时,会调用帖子,必须显示某些内容。还有其他设置会影响帖子/页面,例如静态首页设置。在类别列表中,如果有页面,我会在循环之前返回第一个ID。
在帖子/页面上,页面ID是(在循环之前设置或多或少。这是URL(漂亮或?p = 123格式)指示内容的结果。使用漂亮的名称,site.com上的页面/ foo-bar /将尝试通过" foo-bar"的固定链接规则查找是否有可用的内容。如果有内容,则获取帖子ID。(简化)
稍后在页面构建中,您将进入循环。但是,在循环之前,您还可以更改,排序或扩充循环 - 例如更改页面ID以进行循环或排序。
关于in_the_loop()
,WP说
"如果调用者在循环内,则为True;如果循环未启动或已结束,则为false。"通过http://codex.wordpress.org/Function_Reference/in_the_loop
in_the_loop()
评估循环是否在起作用(循环是WP世界的关键)。同样重要的是 - 当你在循环中时,WP可以迭代多个页面/帖子(ID)。
我没有关于ID总是如何显示的100%防弹解释,但是当您深入研究API时,可能会出现各种挂钩方法。
我理解你的困惑,并同意你的看法。我认为WP将get_the_id()
作为一个基于循环的工具,在循环之外你会得到不可预测的结果。
希望有所帮助,我喜欢在WP工作,我希望你这样做。