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






Есть дополнение это к предложению 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. Ваше здоровье
Пожалуйста, предоставьте
SHOW CREATE TABLE wp_posts. Я с подозрением отношусь к сопоставлению.