如何更改wordpress搜索栏中的搜索操作?

sd2nnvve  于 2021-06-15  发布在  Mysql
关注(0)|答案(1)|浏览(387)

创建新帖子并发布。
标题是 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 不会出现在select的结果中。
类型 no route to host 在wordpress搜索栏中,单击enter。这个帖子的名字是 my test for search 显示为结果。

我找到了网页包含 to ,在左上角,有一个字 Customize 其中包含搜索到的单词 to .
如何在wordpress搜索栏中更改这样的搜索操作?
我想让搜索行为在wordpress saerch栏,例如,当你键入 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
yhxst69z

yhxst69z1#

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!

相关问题