欢迎光临
我们一直在努力

如何创建WordPress自定义查询

建站超值云服务器,限时71元/月

本文目录
[隐藏]

  • 1pre_get_posts 动作
  • 2query_posts() 函数
  • 3WP_Query 类

大家都知道,输入到WordPress的所有数据都将被保存在数据库中,如果我们需要这些数据,就要对数据库进行查询,然后输出我们需要的数据。比如我们需要在首页输出网站的最新文章,或者在分类页面输出该分类的最新文章,又或者在文章页面输出详细的文章内容……

查询数据库的方法很多,较常用的有以下3种:使用pre_get_posts 动作、 query_posts() 函数 或 WP_Query 类。

pre_get_posts 动作

当你查询数据库的时候,Wordpress创建了一个全局变量 $query 。使用动作 pre_get_posts 就可以获取 $query 变量并将其作为参数传递给回调函数。

要知道,pre_get_posts 可以用来获取所有的数据库信息,包括后台管理区域,而且它可以多次使用,所以要获取我们想要的数据,我们需要对它进行判断检查。要检查是否正在改变主查询,我们可以使用函数 is_main_query()。

1
2
3
4
if(is_main_query())
{
     // Modify the query
}

if(is_main_query()) { // Modify the query }

尽管这样,它还是会在后台管理区域中被获取,所以你还需要检查是否在你希望的页面输出,比如,你要修改分类页面的查询,你就需要添加 is_category() 函数。

1
2
3
4
if(is_main_query() && is_category())
{
     // Modify the query
}

if(is_main_query() && is_category()) { // Modify the query }

例如,如果你希望在首页查询中排除某些分类,你可以向下面一样修改查询:

1
2
3
4
5
6
add_action( 'pre_get_posts', 'exclude_category' );
function exclude_category( $query ) {
    if ( $query->is_home() && $query->is_main_query() && ! $query->get( 'cat' ) ){
        $query->set( 'cat', '-5' );
    }
}

add_action( ‘pre_get_posts’, ‘exclude_category’ ); function exclude_category( $query ) { if ( $query->is_home() && $query->is_main_query() && ! $query->get( ‘cat’ ) ){ $query->set( ‘cat’, ‘-5’ ); } }

你还可以通过修改 posts_per_page 参数来修改通过查询获取的文章篇数

1
2
3
4
5
6
add_action( 'pre_get_posts', 'get_one_post' );
function get_one_post( $query ) {
    if ( $query->is_home() && $query->is_main_query() ){
        $query->set( 'posts_per_page', 1 );
    }
}

add_action( ‘pre_get_posts’, ‘get_one_post’ ); function get_one_post( $query ) { if ( $query->is_home() && $query->is_main_query() ){ $query->set( ‘posts_per_page’, 1 ); } }

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 篇:

1
2
3
4
5
6
7
8
9
10
<?php
query_posts( 'posts_per_page=1' );
while ( have_posts() ) : the_post();
	echo '
<h1>';
	the_title();
	echo '</h1>
';
endwhile;
?>

<?php query_posts( ‘posts_per_page=1’ ); while ( have_posts() ) : the_post(); echo ‘ <h1>’; the_title(); echo ‘</h1> ‘; endwhile; ?>

了解更多,请阅读 WordPress函数:query_posts

WP_Query 类

WP_Query 类 定义在 wp-includes/query.php 文件中,它是一个 类(class),用来查询数据库然后在我们想要的页面输出文章。WP_Query 会创建一个可以用在任何页面的变量 $wp_query ,你可以通过多种方式来获取查询的信息。

最主要的方式是 $wp_query->have_posts() ,它可以在循环的内部被 have_posts() 函数调用。你可以通过 the_post() ,在循环的内部使用这个变量来获取当前文章的信息。

1
2
3
4
5
6
7
8
$new_query = new WP_Query( $args );
// The Loop
while ( $new_query->have_posts() ) :
	$new_query->the_post();
	printf('
<h1>%s</h1>
', get_the_title() );
endwhile;

$new_query = new WP_Query( $args ); // The Loop while ( $new_query->have_posts() ) : $new_query->the_post(); printf(‘ <h1>%s</h1> ‘, get_the_title() ); endwhile;

WP_Query 类 还可以用来二次查询数据库,但你需要使用 wp_reset_postdata() 函数 来重置前一个查询。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
$new_query = new WP_Query( $args );
// The Loop
while ( $new_query->have_posts() ) :
	$new_query->the_post();
	printf('
<h1>%s</h1>
', get_the_title() );
endwhile;
 wp_reset_postdata();
$second_query = new WP_Query( $second_args );
// The Loop
while ( $second_query->have_posts() ) :
	$second_query->the_post();
	printf('
<h1>%s</h1>
', get_the_title() );
endwhile;
 wp_reset_postdata();

$new_query = new WP_Query( $args ); // The Loop while ( $new_query->have_posts() ) : $new_query->the_post(); printf(‘ <h1>%s</h1> ‘, get_the_title() ); endwhile; wp_reset_postdata(); $second_query = new WP_Query( $second_args ); // The Loop while ( $second_query->have_posts() ) : $second_query->the_post(); printf(‘ <h1>%s</h1> ‘, get_the_title() ); endwhile; wp_reset_postdata();

  • 参考资料:http://www.paulund.co.uk/how-to-create-custom-queries-in-wordpress
  • 编译:倡萌@WordPress大学 – 如何创建WordPress自定义查询
  • 赞(0)
    版权申明:本站文章部分自网络,如有侵权,请联系:west999com@outlook.com 特别注意:本站所有转载文章言论不代表本站观点! 本站所提供的图片等素材,版权归原作者所有,如需使用,请与原作者联系。未经允许不得转载:IDC资讯中心 » 如何创建WordPress自定义查询
    分享到: 更多 (0)