修改parse_Query上的meta_Query

时间:2015-02-04 作者:yivi

parse_query 过滤器挂钩我正在做:

if ( is_admin() && $pagenow == \'edit.php\' && isset( $_GET[\'ysr_homepage_filter\'] ) && $_GET[\'ysr_homepage_filter\'] == \'1\' ) {
        if ( ! $query->meta_query ) {
            $query->meta_query = new WP_Meta_Query( [
                [
                    \'key\'     => \'ysr_home_sticky\',
                    \'value\'   => \'1\',
                    \'compare\' => \'=\'
                ]
            ] );
        }
    }
尝试按仪表板列表中的特定元筛选特定自定义帖子类型。

自定义字段是正确的,我正在其他WP\\U查询中成功地搜索它,但显然我在这里所做的不是正确的方式,因为我的结果不会受到影响。代码在那里正确运行,我可以看到$query->meta\\u query被设置为我的新WP\\u meta\\u query,但这似乎并不重要。

关于我做错了什么有什么线索吗?我应该挂另一个钩子吗?为现有查询对象创建新元查询的另一种方法?

提前谢谢。

1 个回复
最合适的回答,由SO网友:birgire 整理而成

就在pre_get_posts 胡克被解雇了,公众meta_query 的属性WP_Query 被以下内容覆盖:

$this->meta_query = new WP_Meta_Query(); 
$this->meta_query->parse_query_vars( $q );
在哪里

$q = &$this->query_vars;
$q = $this->fill_query_vars($q);
因此,我认为在pre_get_posts 挂钩已激活。

相反,我们需要通过meta_query 通过query_vars 部分WP_Query.

因此,请尝试以下示例:

if ( ! $query->get( \'meta_query\' ) ) {
    $query->set( \'meta_query\', [
        [
            \'key\'     => \'ysr_home_sticky\',
            \'value\'   => \'1\',
            \'compare\' => \'=\'
        ]
    ] );
}

结束

相关推荐

使用新的WP-Query()从循环中过滤后期格式;

嗨,我目前正在为我的博客构建一个主题。下面的代码指向最新的帖子(特色帖子)。因为这将有一个不同的风格比所有其他职位。然而我想过滤掉帖子格式:链接使用我在循环中定义的WP查询,因为它给我带来了更多的灵活性。我该怎么做呢? <?php $featured = new WP_Query(); $featured->query(\'showposts=1\'); ?> <?php while ($featured->have_post