mysql - 如何更改 wordpress 搜索栏中的搜索操作?
问题描述
创建一个新帖子并发布它。
标题为my test for search
,内容如下:
no host route
检查 wordpress 数据库中发生的情况。
select post_title from wp_posts
where post_content like "%no%"
and post_content like "%route%"
and post_content like "%to%"
and post_content like "%host%";
命名的帖子my test for search
不会出现在选择的结果中。
在 wordpress 搜索栏输入no route to host
,点击回车。名为my test for search
结果的帖子。
我找到了网页包含的原因,to
在左上角,有一个单词Customize
包含搜索到的单词to
。
如何在 wordpress 搜索栏中更改此类搜索操作?
我想让wordpress saerch bar中的搜索行为,例如,当您键入时no route to host
,等于以下sql命令。
select post_title from wp_posts where post_content like "%no%route%to%host%";
我wordpress中的所有插件。
CodePen Embedded Pens Shortcode
Crayon Syntax Highlighter
Disable Google Fonts
Quotmarks Replacer
SyntaxHighlighter Evolved
解决方案
在SQL WHERE 子句中添加了以下内容wp-includes/class-wp-query.php:1306
:
<?php
// wp-includes/class-wp-query.php:~1306
foreach ( $q['search_terms'] as $term ) {
//...
$like = $n . $wpdb->esc_like( $term ) . $n;
$search .= $wpdb->prepare( "{$searchand}(({$wpdb->posts}.post_title $like_op %s) $andor_op ({$wpdb->posts}.post_excerpt $like_op %s) $andor_op ({$wpdb->posts}.post_content $like_op %s))", $like, $like, $like );
// ...
因此,我将连接到pre_get_posts
, 并将查询的单词作为明确的“ search_terms
”提供,因为它们被添加到该子句中,LIKE
就像你说的那样使用修饰符正在寻找!
所以,我们可能会做这样的事情:
<?php
// functions.php
function fuzzify_query(\WP_Query $q) {
if (true === $q->is_search()
&& true === property_exists($q, 'query')
&& true === key_exists('s', $q->query)
) {
$original_query = $q->query['s'];
$words = explode(' ', $original_query);
$fuzzy_words = array_map(
function($word) {
return '%'.$word.'%';
},
$words
);
$q->query_vars['search_terms'] = $fuzzy_words;
return $q;
}
return $q;
}
add_action('pre_get_posts', 'fuzzify_query', 100); // Or whatever priority your fuzziness requires!
推荐阅读
- php - Laravel,自动登录时不会调用经过身份验证的方法
- react-native - 强制应用程序在博览会中重新启动反应本机
- sql - 在while循环中左连接表并动态命名再次用于左连接的新表
- lotus-domino - 我无法让辅助代理在 WebQueryOpen 事件上运行
- python - 在不安装 Python 的情况下运行 Python 脚本
- python - 尝试从类的所有实例访问布尔变量
- r - 在 ggplot2 中指定特定形状
- c# - 基于 TextBoxes 和 CheckBoxes MVVM 过滤 WPF DataGrid
- javascript - 使用对象工厂时如何实现原型继承?
- json - 我们如何在 elm 中将 dict 转换为 JSON?或者有什么方法可以像我们在 JS 中那样对字典进行字符串化?