在PRE_GET_POST中使用多个术语的税务查询

时间:2021-09-29 作者:RobbTe

我正在尝试在我的pre_get_posts 作用所有这些都正常工作,但当阵列具有多个ID时则无法正常工作。假设我的URL看起来像:?listing\\u cat[]=1(&;清单\\u cat[]=2

现在,我正试图过滤掉这两个类别中的帖子。但是我的过滤器只从第一个类别ID获取帖子。我想我需要一个foreach函数,但我不知道如何实现它。目前我有下面的代码。现在我知道我可以使用带逗号的多个术语筛选,如:\'terms\' => array($rt_cat_id[0], $rt_cat_id[1]), 但我只需要它自动从数组中获取所有术语$rt_cat_id 然后用这些来过滤帖子。如何做到这一点?谢谢

add_action( \'pre_get_posts\', \'rt_tax_archive\' );
function rt_tax_archive($query) {
$rt_cat_id = $_GET[\'listing_cat\'];

if( isset( $rt_cat_id ) && ! empty( $rt_cat_id[0] ) ) {
            $tax_query[] = array(
                \'taxonomy\'  => \'listing_category\',
                \'field\'     => \'id\',
                \'terms\'     => array($rt_cat_id[0]),
           );
        }       


}

2 个回复
最合适的回答,由SO网友:Den Isahac 整理而成

只需使用:

\'terms\' => $rt_cat_id

我将同时处理基于数组和基于单个的值。

或者,您可以将代码简化如下:

if( isset( $_GET[ \'listing_cat\' ] ) ) {
   $tax_query[] = array(
      \'taxonomy\' => \'listing_category\',
      \'field\' => \'id\',
      \'terms\' => $_GET[ \'listing_cat\' ]
   );
}

SO网友:RobbTe

因此,工作代码如下所示:

add_action( \'pre_get_posts\', \'rt_tax_archive\' );
function rt_tax_archive($query) {
$rt_cat_id = $_GET[\'listing_cat\'];

if( isset( $rt_cat_id ) && ! empty( $rt_cat_id[0] ) ) {
            $tax_query[] = array(
            \'relation\' => \'OR\',
            array(
            \'taxonomy\' => \'listing_category\',
            \'field\' => \'id\',
            \'terms\' => $rt_cat_id,
            ),
        );
        }       


}