没有循环的模板,最佳实践是什么?

时间:2019-06-16 作者:sporker

我正在处理其他人创建的自定义主题,很明显作者不熟悉WordPress。我在做清理工作,我只是在找各种各样的不好的东西。他们大量使用ACF,因此决定不必使用“循环”。页面模板基本上只有以下内容:

带有模板名称的注释块,一系列ACF get\\U field()调用都可以,但我从未见过这样创建的页面模板。

我的问题不仅仅是最佳实践是什么(我觉得这应该全部包装在标准have\\u posts/the\\u post循环中,即使它只是一个单独的post/page模板),而是在没有调用“the\\u post()”的情况下,这如何工作,以及未来版本的WP是否可能会破坏这种获取post数据的方法。

1 个回复
最合适的回答,由SO网友:Jacob Peattie 整理而成

但是,如果不调用“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变量可能会破坏许多站点),我会感到惊讶,但唯一安全的方法是以正确的方式进行操作。

相关推荐

Admin Theme customization

我遵循wordpress codex网站上关于通过插件创建管理主题的说明。我激活了插件,但我的样式表没有包含在<head>.. 这是我的代码:add_action( \'admin_init\', \'kd_plugin_admin_init\' ); add_action( \'admin_menu\', \'kd_plugin_admin_menu\' ); function kd_plugin_admin_init() { /* Register