wordpress调用WP_Query完成搜索

15 4月

wordpress调用WP_Query完成搜索

在写一个接口,完成东西的检索功能,用到了 WP_Query


WP_Query是WordPress自带的的一个用于处理复杂请求的类(这里的请求的内容不仅包括文章,还可能是页面,用户,分类等其它信息)。

官方文档:
https://codex.wordpress.org/Class_Reference/WP_Query

用法
<?php

// The Query
$the_query = new WP_Query( $args );

// The Loop
while ( $the_query->have_posts() ) :
	$the_query->the_post();
	echo '<li>' . get_the_title() . '</li>';
endwhile;

/* Restore original Post Data 
 * NB: Because we are using new WP_Query we aren't stomping on the 
 * original $wp_query and it does not need to be reset.
*/
wp_reset_postdata();


/* The 2nd Query (without global var) */
$query2 = new WP_Query( $args2 );

// The 2nd Loop
while( $query2->have_posts() ):
	$query2->next_post();
	echo '<li>' . get_the_title( $query2->post->ID ) . '</li>';
endwhile;

// Restore original Post Data
wp_reset_postdata();

?>

作者

显示某个作者的文章.

  • author (int) – 使用作者 id.
  • author_name (string) – 使用 ‘user_nicename’ (不是名称).

显示某作者的文章

显示某作者的文章, 使用作者 id:

$query = new WP_Query( 'author=123' );

显示某作者的文章, 使用作者的 ‘user_nicename’:

$query = new WP_Query( 'author_name=rami' );

显示几个作者的文章

显示几个指定作者的文章:

$query = new WP_Query( 'author=2,6,17,38' );

排除某个作者的文章

显示所有文章 除了 某个作者的,在作者ID前面加一个 ‘-‘ (减号) 就可以了:

$query = new WP_Query( 'author=-12' );

分类目录

显示属于分类目录的文章

  • cat (int) – 使用分类目录 id.
  • category_name (string) – 使用分类目录别名 (不是名称).
  • category__and (array) – 使用分类目录 id.
  • category__in (array) – 使用分类目录 id.
  • category__not_in (array) – 使用分类目录 id.

显示某个分类目录的文章

显示属于这个分类目录的文章 (包含这个分类目录的子分类), 使用分类目录 id:

$query = new WP_Query( 'cat=4' );

显示属于这个分类目录的文章 (包含这个分类目录的子分类), 使用分类目录别名:

$query = new WP_Query( 'category_name=staff' );

显示属于这个分类目录的文章 (包含这个分类目录的子分类), 使用分类目录 id:

$query = new WP_Query( 'category__in=4' );

显示某几个分类目录的文章

显示属于这几分类目录的文章, 使用分类目录 id:

$query = new WP_Query( 'cat=2,6,17,38' );

显示属于这几分类目录的文章, 使用分类目录别名:

$query = new WP_Query( 'category_name=staff,news' );

排除某个分类目录的文章

显示所有文章除了 属于带 ‘-‘ (减号) 的几个分类目录.

$query = new WP_Query( 'cat=-12,-34,-56' );

多个分类目录处理

显示同时属于多个分类目录的文章. 下面的查询显示同时输入分类2和6的文章:

$query = new WP_Query( array( 'category__and' => array( 2, 6 ) ) );

需要显示属于分类 2 或 6 的文章, 你可以使上面提到的 cat, 或使用 category__in (这个不显示属于指定分类的子分类的文章):

$query = new WP_Query( array( 'category__in' => array( 2, 6 ) ) );

同时,你可以可以排除同时不属于某些分类的文章:

$query = new WP_Query( array( 'category__not_in' => array( 2, 6 ) ) );

标签

显示包含指定标签的文章.

  • tag (string) – 使用标签别名.
  • tag_id (int) – 使用标签 id.
  • tag__and (array) – 使用标签 ids.
  • tag__in (array) – 使用标签 ids.
  • tag__not_in (array) – 使用标签 ids.
  • tag_slug__and (array) – 使用标签别名.
  • tag_slug__in (array) – 使用标签别名.

显示包含一个标签的文章

显示包含某个标签的文章, 使用标签别名:

$query = new WP_Query( 'tag=cooking' );

显示包含某个标签的文章, 使用标签id:

$query = new WP_Query( 'tag_id=13' );

显示包含某些标签中任意一个标签的文章

$query = new WP_Query( 'tag=bread,baking' );

显示包含 “所有” 指定标签的文章:

$query = new WP_Query( 'tag=bread+baking+recipe' );

多标签处理

显示同时包含标签id 37和47的文章

$query = new WP_Query( array( 'tag__and' => array( 37, 47 ) ) );

显示包含标签id37或47的文章,你可以使用上面提到的tag,或使用tag__in明确指定:

$query = new WP_Query( array( 'tag__in' => array( 37, 47 ) ) );

显示同时不包含标签id 37和47:的文章:

$query = new WP_Query( array( 'tag__not_in' => array( 37, 47 ) ) );

tag_slug__in 和 tag_slug__and 的作用是一样的, 不同的是值为标签的别名而不是id。

搜索:

s
$query = new WP_Query( 's=keyword' );

发表评论

电子邮件地址不会被公开。 必填项已用*标注