web-dev-qa-db-de.com

wie kann ich die Suche auf Beitragstitel beschränken?

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!

24

Hier ist ein Filter, der den Trick macht. Lege es in den functions.php deines Themas oder 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 Klasse WP_Query kopiert, mit Ausnahme der entfernten post_content LIKE.

UPDATE: Veraltete like_escape() seit 4.0 entfernt

29
TheDeadMedic