it_*_*ure 11 mysql wordpress search
创建一个新帖子并发布它.
标题是my test for search,内容如下:
no host route
Run Code Online (Sandbox Code Playgroud)
检查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%";
Run Code Online (Sandbox Code Playgroud)
命名的帖子my test for search不在select的结果中.
键入no route to hostwordpress搜索栏,然后单击"输入".命名的帖子my test for search显示为结果.
我找到了网页的原因to,在左上角,有一个单词Customize包含搜索到的单词to.
如何在wordpress serach栏中更改此类搜索操作?
我想在wordpress saerch bar中进行搜索行为,例如,当您键入时no route to host,等于以下sql命令.
select post_title from wp_posts where post_content like "%no%route%to%host%";
Run Code Online (Sandbox Code Playgroud)
我的wordpress中的所有插件.
CodePen Embedded Pens Shortcode
Crayon Syntax Highlighter
Disable Google Fonts
Quotmarks Replacer
SyntaxHighlighter Evolved
Run Code Online (Sandbox Code Playgroud)
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 );
// ...
Run Code Online (Sandbox Code Playgroud)
因此,我会挂接到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!
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
254 次 |
| 最近记录: |