Có cách nào để sử dụng $ query-> set ('tax_query' trong bộ lọc pre_get_posts không?


16

Có một cách để sử dụng $query->set('tax_query', ...)trong pre_get_postsbộ lọc? ví dụ mã tiếp theo không làm thay đổi truy vấn. Lưu ý rằng tôi đang xây dựng các nguyên tắc phân loại $ từ và tìm kiếm tùy chỉnh.

function custom_search_filter($query) {
        ...

        // array('taxonomy' => 'category', 'field' => 'id', 'terms' => array( 41,42 ), 'operator' => 'IN')
        $taxonomies = implode(',', $taxonomy_arr);

        // /wordpress/25076/how-to-filter-wordpress-search-excluding-post-in-some-custom-taxonomies

        $taxonomy_query = array('relation' => 'AND', $taxonomies);

        $query->set('tax_query', $taxonomy_query);
    }

    return $query; 
}


add_filter( 'pre_get_posts', 'custom_search_filter', 999 );

Cảm ơn trước.


1
Tại sao bạn chuyển một WP_Queryđối tượng vào một phương thức thiết lập đối số?
t31os

Có tôi đã sai, bây giờ tôi đã sử dụng eval để chuyển đổi chuỗi thành một mảng (và tôi thực sự chắc chắn rằng chuỗi đó an toàn). Cảm ơn.
Jose Pablo Orozco Marín

Câu trả lời:


34

Các $querybiến trong các bộ lọc đại diện cho một WP_Queryđối tượng, vì vậy bạn không nên đi qua một mới WP_Queryđối tượng vào phương pháp để thiết lập các thuộc tính của đối tượng đó.

Câu hỏi bạn đã sao chép mã từ không chính xác bằng cách sử dụng bộ lọc, mà tôi cảm thấy là mấu chốt của vấn đề của bạn.

Có, tax_querycó thể được sử dụng bên trong bộ lọc / hành động pre_get_posts(hoặc tương tự parse_request).

Dưới đây là một ví dụ:
Chỉ định phân loại tùy chỉnh cho các truy vấn tìm kiếm

function search_filter_get_posts($query) {
    if ( !$query->is_search )
        return $query;

    $taxquery = array(
        array(
            'taxonomy' => 'career_event_type',
            'field' => 'id',
            'terms' => array( 52 ),
            'operator'=> 'NOT IN'
        )
    );

    $query->set( 'tax_query', $taxquery );

}
add_action( 'pre_get_posts', 'search_filter_get_posts' );

6
bạn có thể đưa ra một ví dụ hoạt động về việc đặt tax_query bên trong một hành động pre_get_posts không?
đạp xe

$ tax_query là một đối tượng có chứa một mảng lồng nhau. Bạn không thể ghi đè lên đối tượng bằng một mảng lồng nhau.
AlxVallejo

3
$tax_querykhông phải là một đối tượng, $querymặc dù (đó là một ví dụ WP_Query).
t31os

2
điều này không hoàn toàn ghi đè tax_query? $ taxquery không nên được thêm vào dữ liệu hiện tại trong tax_query arg?
hot_barbara

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.