Как изменить действие поиска в строке поиска 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 не будет в результатах выбора. Введите no route to host в строке поиска wordpress и нажмите клавишу ВВОД. Сообщение с названием my test for search показано как результат.

Как изменить действие поиска в строке поиска wordpress?

Я нашел причину, по которой веб-страница содержит to, в левом верхнем углу есть слово Customize, которое содержит искомое слово to.
Как изменить такое действие поиска в поисковой панели wordpress?
Я хочу сделать поведение поиска в строке saerch wordpress, например, когда вы набираете 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

Пожалуйста, предоставьте SHOW CREATE TABLE wp_posts. Я с подозрением отношусь к сопоставлению.

Rick James 23.12.2018 19:14

Ваш поисковый запрос не сгенерирован при установке WP по умолчанию. Похоже, вы его изменили. Поиск поддерживает параметры GET, такие как предложение и точное, но они не будут генерировать желаемый post_content like "%no%route%to%host%";. Не могли бы вы подробнее рассказать, почему метка Customize влияет на ваш поиск, она не должна иметь никакого отношения к поиску.

birgire 27.12.2018 11:00
Освоение архитектуры микросервисов с Laravel: Лучшие практики, преимущества и советы для разработчиков
Освоение архитектуры микросервисов с Laravel: Лучшие практики, преимущества и советы для разработчиков
В последние годы архитектура микросервисов приобрела популярность как способ построения масштабируемых и гибких приложений. Laravel , популярный PHP...
Как построить CRUD-приложение в Laravel
Как построить CRUD-приложение в Laravel
Laravel - это популярный PHP-фреймворк, который позволяет быстро и легко создавать веб-приложения. Одной из наиболее распространенных задач в...
Освоение PHP и управление базами данных: Создание собственной СУБД - часть II
Освоение PHP и управление базами данных: Создание собственной СУБД - часть II
В предыдущем посте мы создали функциональность вставки и чтения для нашей динамической СУБД. В этом посте мы собираемся реализовать функции обновления...
Документирование API с помощью Swagger на Springboot
Документирование API с помощью Swagger на Springboot
В предыдущей статье мы уже узнали, как создать Rest API с помощью Springboot и MySql .
Роли и разрешения пользователей без пакета Laravel 9
Роли и разрешения пользователей без пакета Laravel 9
Этот пост изначально был опубликован на techsolutionstuff.com .
Как установить LAMP Stack - Security 5/5 на виртуальную машину Azure Linux VM
Как установить LAMP Stack - Security 5/5 на виртуальную машину Azure Linux VM
В предыдущей статье мы завершили установку базы данных, для тех, кто не знает.
11
2
637
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Есть дополнение это к предложению 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!

Это не будет генерировать like "%no%route%to%host%", как того требует OP. Похоже, вы пытаетесь сделать то, что параметр поискового запроса exact=0 уже делает по умолчанию. Но я не думаю, что вы можете установить такие условия поиска, поскольку они извлекаются непосредственно из поискового запроса $q['s'], когда поисковый SQL генерируется в WP_Query::parse_search(). Таким образом, похоже, что установленные здесь условия поиска будут переопределены и не повлияют на поисковый запрос SQL. Ваше здоровье

birgire 27.12.2018 11:40

Другие вопросы по теме