快速分解
- query_posts –除非在极少数情况下不使用
- pre_get_posts –如果要更改页面上的默认查询,请使用
- 新的WP_Query –用于从主查询中获得不同的结果
- get_posts –与WP_Query相同,只是以数组格式返回结果
query_posts
不建议再使用query_posts。 有更好的方法来完成您要完成的任务。 试图改变主查询? 使用操作pre_get_posts过滤结果(请参见下文)。 query_posts将原始主查询抛到一边(已经运行之后),并创建一个新的主查询。 它替换所有与发布相关的全局变量,并导致一个全新的数据库调用。 根本没有理由不应该仅更改现有查询。 我敢肯定,在某些情况下应该使用它,但是我想不出什么。 请使用以下选项之一,因为它们很可能更适合。
pre_get_posts
这是一个过滤器。 这会将主查询修改为页面。 因此,例如,我们要更改主页上返回的结果数…
函数tj_change_home_number($ query){if(is_home()){$ query-> set('posts_per_page',2); 返回; }} add_action('pre_get_posts','tj_change_home_number');
这将更改主查询,使其仅在首页上返回2条帖子。
WP_Query
所调用的任何模板上的主要查询都是WP_Query的实例。 当您与模板中的全局post变量进行交互时,这就是WP_Query的结果。 这样做的用例很多,但是与get_posts一样,我将声明一个新的WP_Query ,以提取相关的帖子,类似的话。 请记住,如果在循环浏览新的WP_Query的同时运行the_post()函数,请在循环完成后将函数wp_reset_postdata()重置为原始主查询。
get_posts
通过使用get_posts,您实际上是在调用新的WP_Query ,并以数组格式返回该信息。 当我返回主页上某个滑块的帖子或在侧边栏中调用一些相关的帖子时,通常会使用get_posts。 WP_Query可以很容易地使用,但是它是一种无需修改全局post变量即可接收帖子数组的好方法。 在我看来,它是最简单,最容易使用的。 返回数据后,无需执行任何函数调用,只需遍历数组即可。
这可能会有些混乱,所以请随时在下面的评论中提问。
参考:
WP_Query
pre_get_posts
query_posts
get_posts