Crea una nueva publicación y publícala.
El título es my test for search
, el contenido es el siguiente:
no host route
Comprueba lo que sucede en la base de datos de 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%";
La publicación nombrada my test for search
no estará en el resultado de la selección.
Escriba no route to host
en la barra de búsqueda de wordpress y haga clic en Intro. La publicación nombrada se my test for search
muestra como resultado.
Encontré la razón por la que la página web contiene to
, en la esquina superior izquierda, hay una palabra Customize
que contiene la palabra buscada to
.
¿Cómo cambiar dicha acción de búsqueda en la barra serach de wordpress?
Quiero hacer que el comportamiento de búsqueda en wordpress saerch bar, por ejemplo, cuando escribe no route to host
, sea igual al siguiente comando sql.
select post_title from wp_posts where post_content like "%no%route%to%host%";
Todos los complementos en mi wordpress.
CodePen Embedded Pens Shortcode
Crayon Syntax Highlighter
Disable Google Fonts
Quotmarks Replacer
SyntaxHighlighter Evolved
Existe esta adición a la cláusula SQL WHERE en 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 );
// ...
Por lo tanto, me conectaría a pre_get_posts
, y proporcionaría las palabras de la consulta como explícitas " search_terms
", ya que se agregan a esa cláusula, con el LIKE
modificador tal como dijiste que estaban buscando.
Entonces, podríamos hacer algo como esto:
<?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!
Este artículo se recopila de Internet, indique la fuente cuando se vuelva a imprimir.
En caso de infracción, por favor [email protected] Eliminar
Déjame decir algunas palabras