Wordpress:WP_Query 循环中带有分类术语 ID 的输出列表

Wordpress: Output list with taxonomy term IDs in WP_Query loop

我想在 WP_Query 循环中输出一个列表,其中包含相应 post 的特定分类法 ('genre') 的术语 ID。我设法输出了第一个 ID(如您在代码示例中所见)。如何获得 'tax_query' 数组中 'terms' 的分类法 'genre' 的所有术语 ID 的逗号分隔列表?

function my_function( $query_args) {
    $terms = get_the_terms( $post->ID, 'genre');
    $termlist = $terms[0]->term_id;
    

$query_args = array(
    'post_type' => 'portfolio',
    'orderby' => 'date',
    'order' => 'ASC',
    'tax_query' => array(
        array(
            'taxonomy' => 'genre',
            'field'    => 'term_id',
            'terms'    => array($termlist),
        ),
    ),
);

    return $query_args;

}

要return所有你的ID,你需要使用这个:

$term_ids = []; // Save into this array all ID's

// Loop and collect all ID's
if($terms = get_terms('genre', [
    'hide_empty' => false,
])){
    $term_ids[]=wp_list_pluck($terms, 'term_id'); // Save ID
}

现在您可以通过特定术语获得术语 ID 数组,并且您可以使用 join(',', $term_ids) 函数制作逗号分隔的 ID 列表或您想要的任何内容。

但是如果你想通过特定的 post 收集所有术语 ID,你需要这样的东西:

$terms_ids = [];
if($terms = get_the_terms( $POST_ID_GOES_HERE, 'genre')){
    $term_ids[]=wp_list_pluck($terms, 'term_id');
}

但在使用 get_the_terms 之前,您必须确保已提供 post ID 或定义了对象 ID。

在你的函数中你遗漏了那部分。

这是您函数的更新:

function my_function( $query_args ) {
    global $post; // return current post object or NULL
    
    if($post)
    {
        $terms_ids = array();
        if($terms = get_the_terms( $post->ID, 'genre')){
            $term_ids[]=wp_list_pluck($terms, 'term_id');
        }
        

        $query_args = array(
            'post_type' => 'portfolio',
            'orderby' => 'date',
            'order' => 'ASC',
            'tax_query' => array(
                array(
                    'taxonomy' => 'genre',
                    'field'    => 'term_id',
                    'terms'    => $terms_ids,
                ),
            ),
        );

        return $query_args;
    }
}