Widzę, że wiele osób woli używać zaczepu pre_get_posts zamiast query_posts
Tak!
Tak pre_get_postsfiltruje WP_Queryobiektu , co oznacza niczego można zrobić poprzez query_posts()można zrobić poprzez $query->set()a $query->get(). W szczególności możemy skorzystać z meta_queryatrybutu (patrz Kodeks ):
$meta_query = array(
array(
'key'=>'featured',
'value'=>'yes',
'compare'=>'!=',
),
);
$query->set('meta_query',$meta_query);
Ale… to zastępuje oryginalne „meta kwerenda” (jeśli taka miała). Więc jeśli nie chcesz całkowicie zastąpić oryginalnego zapytania meta, sugeruję:
//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);
W ten sposób dodajemy nasze zapytanie do meta obok istniejących zapytań do meta.
Możesz / możesz nie chcieć ustawić relationwłaściwości $meta_queryna ANDlub OR(aby zwracać posty, które spełniają wszystkie, lub przynajmniej jedno, meta-zapytania).
* Uwaga: ten typ zapytania zwróci posty z „polecanym” meta kluczem, ale którego wartość nie jest yes. Nie będzie zawierać postów, w których „polecany” meta klucz nie istnieje. Będziesz mógł to zrobić w 3.5 .