Я бачу, що багато людей вважають за краще використовувати гачок pre_get_posts замість query_posts
Так!
Таким чином, pre_get_posts
фільтруйте WP_Query
об'єкт, що означає все, що ви могли зробити через query_posts()
вас, можна зробити через $query->set()
і $query->get()
. Зокрема, ми можемо скористатися meta_query
атрибутом (див. Кодекс ):
$meta_query = array(
array(
'key'=>'featured',
'value'=>'yes',
'compare'=>'!=',
),
);
$query->set('meta_query',$meta_query);
Але .. це замінює оригінальний "мета-запит" (якщо він був). Тому, якщо ви не хочете повністю замінити оригінальний мета-запит, пропоную:
//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);
Таким чином ми додаємо наш мета-запит поряд із існуючими мета-запитами.
Ви можете / не хочете встановлювати relation
властивість $meta_query
до AND
або OR
(повертати повідомлення, які задовольняють усі або принаймні один мета-запит).
* Примітка. Цей тип запиту повертає публікації з мета-клавішею 'Featured', але значення якого немає yes
. Він не включатиме публікації, де мета-ключ "показаний" не існує. Ви зможете це зробити в 3.5 .