Настройка поиска WordPress. Как убрать из результатов частичное совпадение?

    Как сделать на wordpress, чтобы в результатах поиска показывалось только полное совпадение?
    Посоветуйте любое решение, с помощью плагина, или изменения кода.

    Новичок Вопрос задан в 12.10.2017 в Поиск.
    Добавить комментарий
    6 Ответ (-ов)

      Добавьте в урл поиска параметр &sentence=1

      Мастер Отвечено в 12.10.2017.
      Добавить комментарий

        Попробуйте в файл functions.php добавить:

         

        add_action('pre_get_posts', 'my_make_search_exact', 10);
        
        function my_make_search_exact($query){
        if(!is_admin() && $query->is_main_query() && $query->is_search) :
        
        $query->set('exact', true);
        
        endif;
        }
        
        

         

        или

         

        add_action('pre_get_posts', 'my_make_search_exact', 10);
        
        function my_make_search_exact($query){
        if(!is_admin() && $query->is_main_query() && $query->is_search) :
        
        $query->set('sentence', true);
        
        endif;
        }
        
        

         

        Гуру Отвечено в 16.10.2017.
        Добавить комментарий

          Спасибо, но не работает, когда добавляю первый кусок кода в functions.php – вообще перестает искать,

          а если второй – то ищет по старому, не строгое соответствие, а все, например по слову “иван” – выдает всех “ивановичей, иванкиных, и т.п.

          Новичок Отвечено в 16.10.2017.
          Добавить комментарий

            Нашел еще такой вариант, чтобы сделать поиск на WordPress более точным. Добавить код в functions.php

            
            add_filter('posts_search', 'my_search_is_exact', 20, 2);
            
            function my_search_is_exact($search, $wp_query){
            
            global $wpdb;
            
            if(empty($search))
            
            return $search;
            
            $q = $wp_query->query_vars;
            
            $n = !empty($q['exact']) ? '' : '%';
            
            $search = $searchand = '';
            
            foreach((array)$q['search_terms'] as $term) :
            
            $term = esc_sql(like_escape($term));
            
            $search.= "{$searchand}($wpdb->posts.post_title REGEXP '[[:<:]]{$term}[[:>:]]') OR ($wpdb->posts.post_content REGEXP '[[:<:]]{$term}[[:>:]]')";
            
            $searchand = ' AND ';
            
            endforeach;
            
            if(!empty($search)) :
            
            $search = " AND ({$search}) ";
            
            if(!is_user_logged_in())
            
            $search .= " AND ($wpdb->posts.post_password = '') ";
            
            endif;
            
            return $search;
            
            }
            
            

            Тест показывает, что результаты поиска отличаются от тех, что делать без кода.

            Знаток Отвечено в 17.10.2017.
            Добавить комментарий

              Спасибо

               

              Новичок Отвечено в 19.10.2017.
              Добавить комментарий

                Извините, не совсем поняла в какой урл? у меня есть search.php в нем никакого урл нету 🙁

                Новичок Отвечено в 16.10.2017.
                Добавить комментарий

                Ваш ответ

                Размещая свой ответ, вы соглашаетесь с политикой конфиденциальности и условиями предоставления услуг.