但是,如果不调用“the\\u post()”,这是如何工作的呢
模板标记,如the_title()
, the_content()
等等,以及ACFget_field()
函数,都使用global $post
变量来确定要显示的帖子标题、内容等(除非指定了特定ID)。
加载WordPress页面时,WordPress会执行“main”查询,这是决定循环中将使用哪些帖子的原因。它还解析URL并确定要查询的内容、发送标题和处理404。
不过,它所做的最后一件事是分配一些全局变量。其中之一是global $post
变量这将自动设置为查询结果中的第一篇文章。它还设置了几个其他全局变量。
因为global $post
变量是在这个早期阶段设置的,像我前面提到的那些函数一般在单个页面或帖子上都能正常工作,即使没有循环。
但这还不够,原因是the_post()
在循环期间运行的函数执行主查询尚未执行的几项操作。这包括:
启动loop_start
行动当有多篇文章时,迭代到循环中的下一篇文章设置in_the_loop()
到true
.设置几个未在主查询中设置的全局变量,包括:$id
, $authordata
, $currentday
, $currentmonth
, $page
, $pages
, $multipage
, 和$numpages
.如果你不跑步while ( have_posts() ) : the_post()
那么上述情况都不会发生。在许多情况下,包括—显然—你的,这似乎不会引起任何麻烦。但是任何依赖于上述任何一项的插件或其他功能都可能无法正常工作。
WP的未来版本是否可能会破坏这种获取post数据的方法。
可以说它已经坏了。如果中短期内有任何变化会破坏当前对您有效的任何内容(在主查询期间不设置全局$post变量可能会破坏许多站点),我会感到惊讶,但唯一安全的方法是以正确的方式进行操作。