如何使用TAX_QUERY同时应用两个术语或其中一个为空

时间:2013-07-23 作者:graphical_force

我很难让tax\\u query充当帖子的过滤器。我想要的是,它将显示有县和状态条款的cpt,但如果没有为状态或县提供条款,它也可以工作。因此,让帖子显示县分类法中是否有“亚当斯”县的术语,以及状态分类法中是否有“锁定”的术语。但如果不提供一个县,它也需要发挥作用,只有一个地位,反之亦然。

这是我的代码:

    <?php
    $args = array(
        \'post_type\' => \'property\',
        \'posts_per_page\' => 5000,
        \'tax_query\' => array(
            \'relation\' => \'AND\',
            array(
            \'taxonomy\' => \'Status\',
            \'field\' => \'slug\',
            \'terms\' => explode( \',\', $st_term_final_string    )
            ),
            array(
            \'taxonomy\' => \'County\',
            \'field\' => \'slug\',
            \'terms\' =>  explode( \',\', $il_term_final_string )
            )
        )
    );
    $loop = new WP_Query( $args );
    while ( $loop->have_posts() ) : $loop->the_post();
        the_title();
        echo \'<div class="entry-content">\';
        echo get_the_post_thumbnail();
        the_content();
        echo \'</div>\';
    endwhile;
    ?>
有什么提示可以帮我找到正确的方向吗?

提前感谢

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

使用以下内容更改代码:

$args = array(
  \'post_type\' => \'property\',
  \'posts_per_page\' => 5000,
);

$statuses = explode( \',\', $st_term_final_string);
$terms = explode( \',\', $il_term_final_string );

if ( $statuses || $terms ) {
  $args[\'tax_query\'] = array();
  if ( $statuses ) {
    $args[\'tax_query\'][] = array(
      \'taxonomy\' => \'Status\',
      \'field\' => \'slug\',
      \'terms\' => $statuses
    );
  }

  if ( $terms ) {
   $args[\'tax_query\'][] = array(
     \'taxonomy\' => \'County\',
     \'field\' => \'slug\',
     \'terms\' => $terms
    );
  }

  if ( $statuses && $terms ) $args[\'tax_query\'][\'relation\'] = \'AND\';

  $loop = new WP_Query( $args );

  // do your stuff here

} else {

  // You have no statuses nor county, I don\'t know what you want to do in this case

}
希望有帮助。

结束

相关推荐

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

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