使用新的WP_QUERY有条件地设置TAX_QUERY

时间:2013-03-07 作者:elclanrs

我有一个带有自定义查询的页面模板:

<?
$filter = explode(\' \', $_GET[\'filter\']); // "page/?filter=taxonomy+term"
$paged = get_query_var(\'paged\') ? get_query_var(\'paged\') : 1;

$query = new WP_Query(array(
  \'post_type\' => \'articles\',
  \'paged\' => $paged,
  \'tax_query\' => array(
    array(
      \'taxonomy\' => $filter[0],
      \'terms\' => $filter[1],
      \'field\' => \'slug\'
    )
   )
));
这很好,但当没有过滤器时,我不想查询分类法,所以我考虑这样做:

$query = new WP_Query(array(
  \'post_type\' => \'articles\',
  \'paged\' => $paged,
));

if (! empty($filter[0])) {
  $query->set(\'tax_query\', array(
    array(
      \'taxonomy\' => $filter[0],
      \'terms\' => $filter[1],
      \'field\' => \'slug\'
    )
  ));
}
但它不像以前那样工作,当没有过滤器时,它什么也不显示,当有任何过滤器时,它只显示所有内容。因此,我猜查询中没有设置分类法。我做错了什么?

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

无法在查询发生后设置查询参数,请在进行查询之前进行设置-

$args = array(
    \'post_type\' => \'articles\',
    \'paged\' => $paged,
);

if( some condition )
    $args[\'tax_query\'] = array( your tax params );

$query = new WP_Query( $args );

结束

相关推荐

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

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