WordPress WP_Query自定义搜索多个关键词

张子凡 WordPress优化 2024-07-27 20:49:07 阅读(...) 评论(0)

WP_Query 是 WordPress 中用于查询文章和自定义内容的核心类。它提供了强大的查询能力,允许开发者以多种方式从数据库中检索和展示内容。WP_Query 支持广泛的查询参数,可以用于获取文章、页面、自定义文章类型等。所以通过 WP_Query 可以创建复杂的搜索功能,以便根据各种条件检索内容。

WordPress Search

但是 WordPress WP_Query 函数对于自定义搜索的支持有限并不支持多个关键词搜索,如果想要直接搜索多个不同的关键词就需要进行二次开发并且增强默认的 SQL 查询才行,所以这里子凡就给大家分享一个简单的办法让 WordPress 能够支持搜索多个关键词。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
//WordPress 自定义搜索多个关键词
add_filter('posts_search', 'fanly_posts_search', 500, 2);
function fanly_posts_search( $search, $wp_query ) {
	if ( $wp_query->get('s') && isset($wp_query->query_vars['fanly_query']) ) {
		global $wpdb;
		$q = $wp_query->query_vars;
		$search = '';
		$searchand = '';
		foreach ((array)$q['search_terms'] as $so ) {
			$so = '%' . $wpdb->esc_like( $so ) . '%';
			$search .= $wpdb->prepare("{$searchand} (($wpdb->posts.post_title LIKE '%s') OR ($wpdb->posts.post_excerpt LIKE '%s'))", $so, $so);
			$searchand = " OR ";
		}
		if ( ! empty( $search ) ) { $search = " AND ({$search}) "; }
	}
	return $search;
}

其中需要注意的是,以上代码中添加了一个对 fanly_query 参数的判断,主要原因是我希望多关键词搜索时只在自己需要的 WP_Query 函数中生效而非整个 WordPress 搜索生效,所以在具体使用中需要在 WP_Query 中增加一个 fanly_query 字段才会生效,例如:

1
2
3
4
5
6
7
8
9
//WP_Query 增加 fanly_query 字段
$imgs  = new WP_Query( [
    'post_type'      => 'attachment',
    'post_mime_type' => 'image',
    'post_status'    => 'inherit',
    'posts_per_page' => 10,
    'fanly_query'    => true,//添加后才能支持多个关键词搜索
    's'              => '泪雪博客 子凡'//多个关键词用空格分隔即可
] );

自定义 WP_Query 搜索参数时也只需要在 s 字段中指定搜索词就可以,多个关键词使用空格分隔开就可以,上面的代码搜索的就是关于泪雪博客或者子凡的媒体库图片文件,可以根据自己需求设置文章类型等更多的自定义操作。

更多关于WordPress优化及疑问可以添加QQ群:255308000

除非注明,否则均为泪雪博客原创文章,禁止任何形式转载

本文链接:https://zhangzifan.com/wordpress-wp_query-search-multiple-keywords.html

留言评论

登录 后留言