Я вижу, что многие люди предпочитают использовать хук 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
. Он не будет включать посты, в которых метаданный ключ «Featured» не существует. Вы сможете сделать это в 3.5 .