以编程方式为筛选器设置‘META_QUERY’

时间:2014-03-07 作者:Ronnieinspain

我正在尝试通过编程为过滤器设置“meta\\u query”,该过滤器应该根据元键的存在来过滤自定义帖子类型。我尝试了几种方法,我在下面的代码中留下了这些方法,并将其注释掉。所有解决方案都没有更改实际的$query“meta\\u query”属性,该属性顽固地保持设置为“false”。

我觉得我错过了一些基本的东西。请协助。非常感谢。

add_filter( \'parse_query\', \'filter_posts_by_no_associated_contact\' );
function filter_posts_by_no_associated_contact( $query ) {

global $pagenow;

$qv = &$query->query_vars;

if( $pagenow == \'edit.php\' &&
    isset($qv[\'post_type\']) && $qv[\'post_type\'] == \'act\' 
    && isset($_GET[\'contact_status\']) && $_GET[\'contact_status\'] != \'\' ){

    $compare = ( $_GET[\'contact_status\'] == \'with_contact\' ) ? \'EXISTS\' : \'NOT EXISTS\';

    // $query->meta_query[] = array(
    $metaquery = array(
            \'key\'       => \'contact_associated\',
            \'value\'     => \'justAstring\',
                \'compare\'   => $compare,
            \'type\'      => \'CHAR\'
    );

    $query->set( \'meta_query\', $metaquery );

    }

}
我已经看过了elsewhere:

$qv = &$query->query_vars;
$qv[\'meta_query\'] = array();
$qv[\'meta_query\'][] = array(
  \'field\' => \'meta-key\',
  \'value\' => $whatever,
  \'compare\' => \'\',
  \'type\' => \'\'
);
但此解决方案会导致php“警告:尝试修改非对象的属性”。

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

Ameta_query 必须是数组的数组。您只有一个数组return 信息你的没有。当然,parse_query 是一个动作而不是过滤器,尽管您使用了add_filter. 使用add_action 取而代之的是pre_get_posts 而不是parse_query. 这是之后发生的第二起火灾parse_query (check the source) 假设第#1项中提到的更改,那么如果使用该挂钩,代码的工作情况或多或少与预期相同

结束

相关推荐

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

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