PRE_GET_POST完全删除TAX_QUERY

时间:2017-11-24 作者:admcfajn

我正在使用pre_get_posts 使用筛选$wp_query->set( \'tax_query\', $tax_query );

I\'m probably better-off doing this with a new WP_Query, but if someone knows something I don\'t I\'d love to hear it

问题,我需要设置默认分类法;保留显示所有帖子的功能。例如:

/cpt/?taxo=this 显示所有具有taxo术语==此的cpt。

$taxo_terms = [];
if( !empty( $_GET[\'taxo\'] ) ){
  $types = explode(\',\', $_GET[\'taxo\']);
  foreach ($types as $key => $val) {
    $taxo_terms[$key] = sanitize_key($val);
  }
}
else{
    $taxo_terms[]=\'this\'; // here\'s where things get ugly.
}

$tax_query = [];
if( !empty($taxo_terms) ){
  $tax_query[] = [
    \'taxonomy\' => \'taxo\',
    \'field\' => \'slug\',
    \'terms\' => $taxo_terms,
    \'operator\' => \'AND\',
  ];
  $wp_query->set( \'tax_query\', $tax_query );
}
我想添加/cpt/?taxo=all 显示所有帖子,无论是什么taxo->terms 他们有。

希望找到一种方法unset 当前tax_query 从循环中,使用pre_get_posts.

有没有办法$wp_query->UNSET?

我试过了$wp_query->set( \'tax_query\', null );

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

这解决了它!:)帽尖gmazzap 有关有用信息:Obliterate the main query and replace it

function wpse_286813_omit_all( $query_vars ){

  // triggered also in admin pages
  if ( is_admin() )
    return $query_vars;

  if( !empty($query_vars[\'taxo\']) && $query_vars[\'taxo\'] === \'all\' ){
    $query_vars[\'taxo\']=\'\';
  }
  return $query_vars;

}
add_filter( \'request\', \'wpse_286813_omit_all\' );

结束

相关推荐

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

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