我正在尝试将数组传递给terms parameter. 基本上,我有一个“投资组合”custom post type 在那里我需要得到所有categories 并将其传递给术语,以便仅显示“筛选”结果,请查看以下代码:
if ( ! empty ( $categories ) ) {
foreach ( $categories as $cat ) {
$filter = get_term_by( \'id\', $cat, \'portfolio-category\' );
if ( ! empty( $filter ) ) {
$query_filter .= $filter->slug . \',\';
}
}
}
$args = array(
\'post_type\' => \'portfolio\',
\'tax_query\' => array(
array(
\'taxonomy\' => \'portfolio-category\',
\'field\' => \'slug\',
\'terms\' => $query_filter,
)
),
\'paged\' => $paged,
\'posts_per_page\' => $projects_per_page,
);
问题似乎是因为“terms”得到的数组格式。如果我直接传递一个数组,如下所示:
\'terms\' => array(\'one\', \'two\', \'three\'),
它确实可以工作,但我从$query\\u filter获得的结果,无论我是否首先使用
str_replace (因为我得到了相同的结果“1”、“2”、“3”),所以它不起作用,我猜是因为数组格式。
也许你们中的一些人可以帮我解决这个问题,因为这似乎是我的PHP逻辑中的一个非常基本的缺陷,而我缺少的地方。
非常感谢!
最合适的回答,由SO网友:Jacob Peattie 整理而成
问题是传递的字符串中有逗号,而不是实际的数组。
结果如下:
foreach ( $categories as $cat ) {
$filter = get_term_by( \'id\', $cat, \'portfolio-category\' );
if ( ! empty( $filter ) ) {
$query_filter .= $filter->slug . \',\';
}
}
是:
\'one,two,three,\'
不是数组。因此,您正在查询“一、二、三”类别中的投资组合项目,这可能不存在。
如果要查询多个slug,需要传递一个数组,为此需要构建一个数组,如下所示:
$query_filter = []; // Initialise empty array.
foreach ( $categories as $cat ) {
$filter = get_term_by( \'id\', $cat, \'portfolio-category\' );
if ( ! empty( $filter ) ) {
$query_filter[] = $filter->slug; // Add slug to array.
}
}
但是。这些都不是必需的。我可以从你的代码中看出
$categories
已经是一个ID数组。这意味着你可以通过$categories
直接到查询。无需费心去拿鼻涕虫:$args = array(
\'post_type\' => \'portfolio\',
\'tax_query\' => array(
rray(
\'taxonomy\' => \'portfolio-category\',
\'field\' => \'term_id\',
\'terms\' => $categories,
),
),
\'paged\' => $paged,
\'posts_per_page\' => $projects_per_page,
);