Làm thế nào để hạn chế tìm kiếm để đăng tiêu đề?


26

Có cách nào để hạn chế tìm kiếm để đăng tiêu đề? Tôi biết tôi có thể sửa đổi tệp lõi query.php nhưng phải có một cách để làm điều đó với hook phải không?

Cảm ơn trước!

Câu trả lời:


31

Đây là một bộ lọc sẽ thực hiện các mẹo. Thả nó vào chủ đề của bạn functions.phphoặc một 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 );

Hầu hết các mã chỉ được sao chép từ WP_Querylớp, ngoại trừ việc post_content LIKEloại bỏ.

CẬP NHẬT: Đã xóa không dùng nữa like_escape()từ 4.0


công trình tuyệt vời hoàn hảo, tôi biết có một bộ lọc cho việc này, không thể tìm thấy nó ở bất cứ đâu trong codex, cảm ơn rất nhiều!
Javier Villanueva

@TheDeadMedic Tôi vừa thử nó trên blog của mình và truy vấn cụ thể đó hiện không trả lại kết quả nào, có hoặc không có mã này. Có ý kiến ​​gì không?
Ashfame

Bây giờ nó hoạt động như bình thường mà không có mã nhưng mã không hoạt động với tôi. Nó cho thấy kết quả tương tự: /
Ashfame

@Ashfame Tôi đã sửa lại câu trả lời của mình.
TheDeadMedic

1
Thông báo PHP: PHP Lỗi nghiêm trọng: Gọi đến phương thức không xác định wpdb :: esc_like () --- Nếu bạn có WordPress cũ hơn, đây là một chức năng mới kể từ WP 4.0
PJ Brunet
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.