Wie kann ich die Suche einschränken, um Titel zu veröffentlichen?

26

Gibt es eine Möglichkeit, die Suche auf Beitragstitel zu beschränken? Ich weiß, dass ich die Kerndatei query.php ändern kann, aber es muss eine Möglichkeit geben, dies mit Hooks zu tun, oder?

Danke im Voraus!

Javier Villanueva
quelle

Antworten:

31

Hier ist ein Filter, der den Trick macht. Ziehen Sie es in Ihr Theme functions.phpoder in ein Plugin.

/**
 * Search SQL filter for matching against post title only.
 *
 * @link    http://wordpress.stackexchange.com/a/11826/1685
 *
 * @param   string      $search
 * @param   WP_Query    $wp_query
 */
function wpse_11826_search_by_title( $search, $wp_query ) {
    if ( ! empty( $search ) && ! empty( $wp_query->query_vars['search_terms'] ) ) {
        global $wpdb;

        $q = $wp_query->query_vars;
        $n = ! empty( $q['exact'] ) ? '' : '%';

        $search = array();

        foreach ( ( array ) $q['search_terms'] as $term )
            $search[] = $wpdb->prepare( "$wpdb->posts.post_title LIKE %s", $n . $wpdb->esc_like( $term ) . $n );

        if ( ! is_user_logged_in() )
            $search[] = "$wpdb->posts.post_password = ''";

        $search = ' AND ' . implode( ' AND ', $search );
    }

    return $search;
}

add_filter( 'posts_search', 'wpse_11826_search_by_title', 10, 2 );

Der größte Teil des Codes wird nur aus der WP_QueryKlasse kopiert , mit Ausnahme der post_content LIKEentfernten.

UPDATE: Wurde like_escape()seit 4.0 entfernt

TheDeadMedic
quelle
Tolle Arbeit perfekt, ich wusste, dass es einen Filter dafür gibt, konnte ihn nirgendwo im Codex finden, vielen Dank!
Javier Villanueva
@TheDeadMedic Ich habe es gerade in meinem Blog ausprobiert und diese spezielle Abfrage gibt jetzt überhaupt kein Ergebnis zurück, mit oder ohne diesen Code. Irgendwelche Ideen?
Ashfame
Jetzt funktioniert es wie gewohnt ohne den Code, aber der Code hat bei mir nicht funktioniert. Es zeigte die gleichen Ergebnisse: /
Ashfame
@Ashfame Ich habe meine Antwort überarbeitet.
TheDeadMedic
1
PHP-Meldung: Schwerwiegender PHP-Fehler: Aufruf der undefinierten Methode wpdb :: esc_like () --- Wenn Sie ein älteres WordPress haben, ist dies eine neue Funktion ab WP 4.0
PJ Brunet