bagaimana membatasi pencarian untuk memposting judul?

27

Apakah ada cara untuk membatasi pencarian untuk memposting judul? Saya tahu saya bisa memodifikasi file inti query.php tetapi harus ada cara untuk melakukannya dengan kait, kan?

Terima kasih sebelumnya!

Javier Villanueva
sumber

Jawaban:

32

Berikut filter yang akan melakukan trik. Masukkan ke dalam tema functions.phpatau plugin Anda.

/**
 * 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 );

Sebagian besar kode hanya disalin dari WP_Querykelas, kecuali dengan yang post_content LIKEdihapus.

UPDATE: Dihapus usang like_escape()sejak 4.0

TheDeadMedic
sumber
Karya-karya hebat dengan sempurna, saya tahu ada filter untuk ini, tidak dapat menemukannya di mana pun dalam kodeks, terima kasih banyak!
Javier Villanueva
@TheDeadMedic Saya baru saja mencobanya di blog saya dan permintaan khusus itu sekarang tidak membuahkan hasil sama sekali, dengan atau tanpa kode ini. Ada ide?
Ashfame
Sekarang ini berfungsi seperti biasa tanpa kode tetapi kode tidak bekerja untuk saya. Itu menunjukkan hasil yang sama: /
Ashfame
@Ashfame Saya telah merevisi jawaban saya.
TheDeadMedic
1
Pesan PHP: Kesalahan PHP Fatal: Memanggil ke metode tidak terdefinisi wpdb :: esc_like () --- Jika Anda memiliki WordPress yang lebih lama, ini adalah fungsi baru pada WP 4.0
PJ Brunet