我正在尝试在我的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]),
);
}
}
最合适的回答,由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,
),
);
}
}