如何理解WordPress主题中的主循环?

06月/13日/WordPress/浏览 213

熟悉WordPress主题开发的朋友,对于【主循环】这个词一定不陌生。


主循环为开发主题,带来了很大的方便,也给一些WordPress新同学,带来了一些困惑。


比如,查询数据会莫名其妙的乱掉。比如,主循环的查询结果,并不是想要的结果



做过WordPress主题开发的朋友都知道,WordPress的URL和主题模板页面的对应关系。


主循环,就是,WordPress根据URL解析查询参数;然后,根据查询参数,从MySQL查询出的文章列表。


在开发WordPress主题时,直接使用查询出的数据就可以了。这样,对于不太熟悉PHP的同学是很方便的。





为什么,有时候数据会乱掉呢?这主要是全局变量的锅。使用了全局变量,难免大家都会修改这个变量。


如上图(源自WordPress官方)所示,query_posts()函数,专为主循环设计。


调用 query_posts,就会使用到 $wp_query 和 $post 两个全局变量


WordPress官方官方警告:务必使用 wp_reset_query 重置主循环;使用 wp_reset_postdata 重置 $post。



那么,如何修改主循环的查询结果呢?


根据上文,我们很容易得出答案:使用 query_posts ,传入合适的参数,就可以。不过,这么做是不对的。


正确的方法是使用 pre_get_posts 钩子。在回调函数内,用函数 is_main_query 判断是主循环后,修改查询参数。



大概整理一下WodPress的设计思路:


1.  query_posts 是主循环专用的,任何时候,都不应该主动调用;


2. 如果想要修改主循环,请使用 pre_get_posts 钩子;


3. 其他要查询文章的地方,使用 get_posts 或者 WP_Query。


发表评论

暂无评论,抢个沙发...

客服 工单