Tôi thấy nhiều người thích sử dụng hook pre_get_posts thay vì query_posts
Yay!
Vì vậy, pre_get_posts
lọc một WP_Query
đối tượng có nghĩa là bất cứ điều gì bạn có thể làm thông qua query_posts()
bạn có thể làm thông qua $query->set()
và $query->get()
. Cụ thể, chúng ta có thể sử dụng meta_query
thuộc tính (xem Codex ):
$meta_query = array(
array(
'key'=>'featured',
'value'=>'yes',
'compare'=>'!=',
),
);
$query->set('meta_query',$meta_query);
Nhưng .. điều này thay thế cho 'truy vấn meta' ban đầu (nếu có). Vì vậy, trừ khi bạn muốn thay thế hoàn toàn truy vấn meta ban đầu, tôi đề nghị:
//Get original meta query
$meta_query = $query->get('meta_query');
//Add our meta query to the original meta queries
$meta_query[] = array(
'key'=>'featured',
'value'=>'yes',
'compare'=>'!=',
);
$query->set('meta_query',$meta_query);
Bằng cách này, chúng tôi thêm truy vấn meta cùng với các truy vấn meta hiện có.
Bạn có thể / không muốn thiết lập các relation
tài sản của $meta_query
để AND
hoặc OR
(để trở lại bài viết mà đáp ứng tất cả, hoặc ít nhất là một, truy vấn meta).
* Lưu ý: Loại truy vấn này sẽ trả về các bài đăng có khóa meta 'đặc trưng', nhưng giá trị của nó thì không yes
. Nó sẽ không bao gồm các bài đăng mà khóa meta 'đặc trưng' không tồn tại. Bạn sẽ có thể làm điều này trong 3.5 .