Widzę, że wiele osób woli używać zaczepu pre_get_posts zamiast query_posts
Tak!
Tak pre_get_posts
filtruje WP_Query
obiektu , 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_query
atrybutu (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ć relation
właściwości $meta_query
na AND
lub 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 .