无法获取术语的Work Tax_Query数组

时间:2019-07-01 作者:Urko.Grrt

我正在尝试将数组传递给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逻辑中的一个非常基本的缺陷,而我缺少的地方。

非常感谢!

1 个回复
最合适的回答,由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,
);