代码之家  ›  专栏  ›  技术社区  ›  showkey

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

  •  11
  • showkey  · 技术社区  · 6 年前

    创建一篇新文章并发布它。

    标题是 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%";
    

    该职位名为 我的搜索测试 不会出现在select的结果中。
    类型 no route to host 在wordpress搜索栏中,单击enter。 该职位名为 我的搜索测试 作为结果显示。

    enter image description here

    我找到了网页包含的原因 to ,在左上角,有一个单词 Customize 其中包含搜索的单词 .
    如何更改wordpress搜索栏中的搜索操作?
    没有到主机的路由 ,等于以下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
    
    1 回复  |  直到 6 年前
        1
  •  4
  •   Cameron Hurd    6 年前

    添加到上的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!