查询数据库的方法很多,较常用的有以下3种:使用pre_get_posts 动作、 query_posts() 函数 或 WP_Query 类。
一、pre_get_posts 动作
当查询数据库的时候,Wordpress创建了一个全局变量 $query 。使用动作 pre_get_posts 就可以获取 $query 变量并将其作为参数传递给回调函数。
要知道,pre_get_posts 可以用来获取所有的数据库信息,包括后台管理区域,而且它可以多次使用,所以要获取想要的数据,需要对它进行判断检查。要检查是否正在改变主查询,我们可以使用函数 is_main_query()。
尽管这样,它还是会在后台管理区域中被获取,所以还需要检查是否在用户个人希望的页面输出,比如,要修改分类页面的查询,就需要添加 is_category() 函数。
例如,如果希望在首页查询中排除某些分类,可以向下面一样修改查询:
还可以通过修改 posts_per_page 参数来修改通过查询获取的文章篇数。
posts_per_page 是用来修改WordPress默认的查询的,如果需要添加额外的查询,你就需要使用 WP_Query 类。
二、query_posts() 函数
query_posts() 是修改WordPress主查询的另一种方法,这是最简单的编辑数据库查询的方法,因为它会覆盖默认的 $query 变量。但 query_posts() 不是最好的,也不是最有效的方法,更好的方式还是使用 posts_per_page 来修改主查询。
就像 posts_per_page 一样,可以使用 query_posts() 来修改返回的文章数量,默认情况下,WordPress会返回 10 篇文章,可以使用下面代码修改为 1 篇:
三、WP_Query 类
WP_Query 类 定义在 wp-includes/query.php 文件中,它是一个 类(class),用来查询数据库然后在我们想要的页面输出文章。WP_Query 会创建一个可以用在任何页面的变量 $wp_query ,可以通过多种方式来获取查询的信息。
最主要的方式是 $wp_query->have_posts() ,它可以在循环的内部被 have_posts() 函数调用。你可以通过 the_post() ,在循环的内部使用这个变量来获取当前文章的信息。
WP_Query 类 还可以用来二次查询数据库,但需要使用 wp_reset_postdata() 函数 来重置前一个查询。