Wie ändere ich die Suchaktion in der WordPress-Suchleiste?

Lesezeit: 3 Minuten

Benutzeravatar von showkey
Showkey

Erstelle einen neuen Beitrag und veröffentliche ihn.

Der Titel lautet my test for searchInhalt darin ist wie folgt:

no host route

Überprüfen Sie, was in der WordPress-Datenbank passiert.

 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%";

Der Beitrag mit dem Namen my test for search wird nicht im Ergebnis der Auswahl enthalten sein.
Typ no route to host in der WordPress-Suchleiste und klicken Sie auf die Eingabetaste. Der Beitrag mit dem Namen my test for search als Ergebnis angezeigt.

Geben Sie hier die Bildbeschreibung ein

Ich habe den Grund gefunden, den die Webseite enthält to In der linken oberen Ecke befindet sich ein Wort Customize die das gesuchte Wort enthält to.
Wie kann man eine solche Suchaktion in der WordPress-Suchleiste ändern?
Ich möchte das Suchverhalten in WordPress Suchbar machen, zum Beispiel, wenn Sie tippen no route to hostgleich dem folgenden SQL-Befehl.

select post_title from wp_posts where post_content like "%no%route%to%host%";

Alle Plugins in meinem WordPress.

CodePen Embedded Pens Shortcode
Crayon Syntax Highlighter
Disable Google Fonts
Quotmarks Replacer
SyntaxHighlighter Evolved

  • Geben Sie bitte SHOW CREATE TABLE wp_posts. Ich bin misstrauisch gegenüber der Kollation.

    – Rick James

    23. Dezember 2018 um 18:14 Uhr

  • Ihre Suchanfrage ist nicht die, die von einer Standard-WP-Installation generiert wird. Sieht aus, als hättest du es geändert. Die Suche unterstützt GET-Parameter wie Satz und Exakt, aber sie werden nicht Ihren Gesuchten generieren post_content like "%no%route%to%host%";. Können Sie weiter erläutern, warum das Etikett anpassen Ihre Suche beeinflusst, es sollte völlig unabhängig von der Suche sein.

    – Birgire

    27. Dezember 2018 um 10:00 Uhr


Es gibt Dies Ergänzung zur SQL WHERE-Klausel an 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 );
    // ...

Daher würde ich in die einhaken pre_get_postsund geben Sie die Wörter der Abfrage als explizit “search_terms“, da sie in diese Klausel eingefügt werden, mit dem LIKE Modifikator, genau wie Sie sagten, gesucht!

Also könnten wir so etwas machen:

<?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!

  • Dies wird nicht generiert like "%no%route%to%host%" wie von OP gewünscht. Klingt eher so, als ob Sie versuchen, das zu tun, was der Suchabfrageparameter ist exact=0 bereits standardmäßig. Aber ich glaube nicht, dass man solche Suchbegriffe setzen kann, da sie direkt aus der Suchanfrage extrahiert werden $q['s'] wenn die Such-SQL generiert wird WP_Query::parse_search(). Es scheint also, dass die hier festgelegten Suchbegriffe überschrieben werden und keine Auswirkungen auf die SQL-Suchabfrage haben. Prost

    – Birgire

    27. Dezember 2018 um 10:40 Uhr

1397140cookie-checkWie ändere ich die Suchaktion in der WordPress-Suchleiste?

This website is using cookies to improve the user-friendliness. You agree by using the website further.

Privacy policy