首页 > 其他分享 >WordPress WP_Query自定义搜索多个关键词

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

时间:2024-10-16 11:36:03浏览次数:7  
标签:搜索 search 自定义 WP WordPress Query query

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

WordPress Search

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

//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 字段才会生效,例如:

//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

标签:搜索,search,自定义,WP,WordPress,Query,query
From: https://www.cnblogs.com/fanly/p/18469495/wordpress-wp_query-search-multiple-keywords

相关文章

  • 界面组件DevExpress WPF v24.1亮点 - 支持全新的字体图标图像
    DevExpressWPF拥有120+个控件和库,将帮助您交付满足甚至超出企业需求的高性能业务应用程序。通过DevExpressWPF能创建有着强大互动功能的XAML基础应用程序,这些应用程序专注于当代客户的需求和构建未来新一代支持触摸的解决方案。DevExpressWPF控件日前正式发布了今年一个重大版......
  • 自定义信号与槽
    在Qt中,自定义信号与槽是实现对象间通信的一种机制。信号和槽是Qt对象通信的核心特性,使得一个对象能够在发生某种事件时通知其他对象。自定义信号与槽的实现步骤如下:定义信号:在Qt中,信号是由signals关键字声明的类成员函数。它们不需要实现,只需声明。classMyClass:publi......
  • [SWPUCTF 2021 新生赛]jicao,[SWPUCTF 2021 新生赛]easy_md5
    [SWPUCTF2021新生赛]jicao<?phphighlight_file('index.php');include("flag.php");$id=$_POST['id'];$json=json_decode($_GET['json'],true);if($id=="wllmNB"&&$json['x']=="wllm"......
  • [SWPUCTF 2022 新生赛]1z_unserialize
    <?phpclasslyh{public$url='NSSCTF.com';public$lt;public$lly;function__destruct(){$a=$this->lt;$a($this->lly);//这里相当于(this->lt)(this->lly)即lt(lly)。}......
  • [SWPUCTF 2021 新生赛]re1
    把它的附件下载下来,发现是这样的。接着把它拖到这里面去查看,发现它没有壳,且是64位的,我们用64位的ida打开。用f5查看伪代码从代码中可以看出,未知str1。在两个for循环中,把str1中ASCII码值为101(e)和97(a)分别换成了3和4,所以str1为{easy_reverse}即flag为:NSSCTF{easy_reverse......
  • [SWPUCTF 2021 新生赛]pop
    先进行代码审计:classw44m{private$admin='aaa';protected$passwd='123456';//!!!有private时,一定要进行url编码,否则有可能会出错publicfunctionGetflag(){if($this->admin==='w44m'&&$this->passwd===&#......
  • wpf combobox 去除下拉框展开时自动选择文本
    新增一个自定义控件继承ComboBox,同事在输入事件之前打开下拉框publicpartialclassComboBoxEx:ComboBox{publicComboBoxEx(){}privateintcaretPosition;publicoverridevoidOnApplyTemplate(){base.OnApplyTemplate(......
  • 【idea技巧篇】idea的类注释和方法注释模版自定义设置
    这块idea技巧虽然常用,谁没事会经常修改模版设置呢,一般是搭建开发环境的时候或者开发规范要求等设置一次就行了。用的虽然少,但几乎每次搭建环境都会用到,这里记录下并分享设置的过程已经发现的更高级的一些使用技巧。注释模版idea默认创建java文件时,是不会生成类注释的,但是......
  • Java 列表元素自定义排序
    在Java开发过程中,有时会遇到需要对列表中元素进行自定义的排序。这样的排序往往不能由元素本身的特性(比如字符串长度、首字母顺序)判断,需要自己指定顺序。比如对汉字的数字进行排序,他们的字符串长度都为1,首字母顺序也不能得到预期的结果,因此需要自定义排序。以下是示例代码:p......
  • Delphi 自定义窗体(最大化、最小化、关闭、窗体的移动)
    UsesShellAPI;1、//最小化procedureTForm1.btn1Click(Sender:TObject);varI,J,X,Y:Word;begin//第一种:最小化在屏幕的左下角,不是常见的最小化//WindowState:=wsMinimized;//第儿种:最小化在任务栏里面,是常见的最小化postmessage(Self.Handle,WM_SYSCOMMAN......