我看到许多人更喜欢使用pre_get_posts挂钩而不是query_posts
好极了!
所以pre_get_posts过滤器WP_Query的对象,这意味着什么,你可以通过做query_posts()你可以通过做$query->set()和$query->get()。特别是,我们可以利用该meta_query属性(请参阅Codex):
$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(返回满足所有或至少一个元查询的帖子)。
* 注意:此类查询将返回带有“功能”元关键字的帖子,但其值不是yes。它不会包括“功能”元键不存在的帖子。您将可以在3.5中做到这一点。