¿Cómo cambiar la acción de búsqueda en la barra de búsqueda de wordpress?

3 minutos de lectura

avatar de usuario
showkey

Crea una nueva publicación y publícala.

El título es my test for searchel contenido es el siguiente:

no host route

Compruebe 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.
Escribe no route to host en la barra de búsqueda de wordpress y haga clic en entrar. La publicación nombrada my test for search mostrado como resultado.

ingrese la descripción de la imagen aquí

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 de búsqueda de wordpress?
Quiero hacer que el comportamiento de búsqueda en wordpress saerch bar, por ejemplo, cuando escribas no route to hostigual 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

  • Por favor proporcione SHOW CREATE TABLE wp_posts. Sospecho de la colación.

    –Rick James

    23 de diciembre de 2018 a las 18:14

  • Su consulta de búsqueda no es la generada por una instalación de WP predeterminada. Parece que lo has modificado. La búsqueda admite parámetros GET como oración y exacto, pero no generarán su búsqueda post_content like "%no%route%to%host%";. ¿Puede ampliar más por qué la etiqueta Personalizar está afectando su búsqueda? Debería no tener ninguna relación con la búsqueda.

    – birgire

    27 dic 2018 a las 10:00


hay este 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 engancharía en el pre_get_postsy proporcione 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 estabas 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!

  • Esto no generará like "%no%route%to%host%" como quería OP. Suena más como si estuviera tratando de hacer lo que el parámetro de consulta de búsqueda exact=0 ya lo hace por defecto. Pero no creo que pueda establecer términos de búsqueda como este, ya que se extraen directamente de la consulta de búsqueda. $q['s'] cuando se genera el SQL de búsqueda en WP_Query::parse_search(). Por lo tanto, parece que los términos de búsqueda establecidos aquí se anularán y no afectarán la consulta SQL de búsqueda. Salud

    – birgire

    27 dic 2018 a las 10:40

¿Ha sido útil esta solución?