WP_GET_OBJECT_TERMS()以获取附加到当前查询中所有帖子的所有术语的列表

时间:2012-04-26 作者:HandiworkNYC.com

如何使用wp\\u get\\u object\\u terms()获取当前查询中附加到所有帖子的所有术语的列表?

例如,对于当前查询,我想从所有查询的帖子中包含的“Alfa”分类中获取一个术语数组。

wp_get_object_terms($wp_query, \'alfa\');
但似乎只返回数组中的一个项目。。。

我这样做是为了构建一个数组来交叉检查导航菜单中的一个分类法和另一个分类法,目前正在使用以下代码进行交叉检查,但我认为一定有更好的方法。

请帮忙!谢谢

$queried_terms = array();
if ( $wp_query->have_posts() ) : while ( $wp_query->have_posts() ) : $wp_query->the_post();
    $postid = $post->ID; 

    if( has_term( \'\', \'alfa\', $postid) ) {
        $terms = get_the_terms( $postid, \'alfa\' );
        foreach($terms as $term) {
            $queried_terms[] = $term->slug;
        }
    }

endwhile; endif;
rewind_posts();
wp_reset_query();

$queried_terms = array_unique($queried_terms);

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

我认为你走对了,因为wp_get_object_terms() 可以将ID数组作为其第一个参数,只是$wp\\u query不是您想要的数组。

我不能保证这是更有效的(不是我的专业领域),但我相信这个[部分测试过的]代码片段可以做你想做的事情,至少少一个循环array_unique():

// get $wp_query
global $wp_query;
// get array of post objects    
$my_posts = $wp_query -> posts;
// make array for the post IDs
$my_post_ids = array();
// loop through posts array for IDs
foreach( $my_posts as $my_post ) {
    $my_post_ids[] = $my_post->ID;
}
// get the terms
$my_terms = wp_get_object_terms( $my_post_ids, \'alfa\' );
wp_get_object_terms() 第三次$args 参数,您可能需要设置该参数以获取所需的输出,但我将把它留给您。

更新:使用new to me功能可以缩短时间wp_list_pluck(). 这同样未经测试,但看起来是正确的:

// get $wp_query
global $wp_query;
// get array of post objects    
$my_posts = $wp_query -> posts;
// NEW: make array of the post IDs in one step
$my_post_ids = wp_list_pluck( $my_posts, \'ID\' );
// get the terms
$my_terms = wp_get_object_terms( $my_post_ids, \'alfa\' );
你可以看到in the source 这个运行相同foreach 循环代码,但看起来更好一点。

SO网友:Jon

上述概括对我很有用:

$args = array( \'cat\' = -1 ); // e.g. to get list of posts in any category
$postobjs = get_posts( $args );
$postids = wp_list_pluck( $postobjs, \'ID\' );
$taxonomy = \'mytax\' // your taxonomy name
$termobjs = wp_get_object_terms( $postids, $taxonomy );
$termlist = array_unique( wp_list_pluck( $termobjs, \'name\' ) ); // distinct term names
它在“mytax”自定义分类中输出唯一的术语列表。感谢@mrwweb:-)

结束
WP_GET_OBJECT_TERMS()以获取附加到当前查询中所有帖子的所有术语的列表 - 小码农CODE - 行之有效找到问题解决它

WP_GET_OBJECT_TERMS()以获取附加到当前查询中所有帖子的所有术语的列表

时间:2012-04-26 作者:HandiworkNYC.com

如何使用wp\\u get\\u object\\u terms()获取当前查询中附加到所有帖子的所有术语的列表?

例如,对于当前查询,我想从所有查询的帖子中包含的“Alfa”分类中获取一个术语数组。

wp_get_object_terms($wp_query, \'alfa\');
但似乎只返回数组中的一个项目。。。

我这样做是为了构建一个数组来交叉检查导航菜单中的一个分类法和另一个分类法,目前正在使用以下代码进行交叉检查,但我认为一定有更好的方法。

请帮忙!谢谢

$queried_terms = array();
if ( $wp_query->have_posts() ) : while ( $wp_query->have_posts() ) : $wp_query->the_post();
    $postid = $post->ID; 

    if( has_term( \'\', \'alfa\', $postid) ) {
        $terms = get_the_terms( $postid, \'alfa\' );
        foreach($terms as $term) {
            $queried_terms[] = $term->slug;
        }
    }

endwhile; endif;
rewind_posts();
wp_reset_query();

$queried_terms = array_unique($queried_terms);

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

我认为你走对了,因为wp_get_object_terms() 可以将ID数组作为其第一个参数,只是$wp\\u query不是您想要的数组。

我不能保证这是更有效的(不是我的专业领域),但我相信这个[部分测试过的]代码片段可以做你想做的事情,至少少一个循环array_unique():

// get $wp_query
global $wp_query;
// get array of post objects    
$my_posts = $wp_query -> posts;
// make array for the post IDs
$my_post_ids = array();
// loop through posts array for IDs
foreach( $my_posts as $my_post ) {
    $my_post_ids[] = $my_post->ID;
}
// get the terms
$my_terms = wp_get_object_terms( $my_post_ids, \'alfa\' );
wp_get_object_terms() 第三次$args 参数,您可能需要设置该参数以获取所需的输出,但我将把它留给您。

更新:使用new to me功能可以缩短时间wp_list_pluck(). 这同样未经测试,但看起来是正确的:

// get $wp_query
global $wp_query;
// get array of post objects    
$my_posts = $wp_query -> posts;
// NEW: make array of the post IDs in one step
$my_post_ids = wp_list_pluck( $my_posts, \'ID\' );
// get the terms
$my_terms = wp_get_object_terms( $my_post_ids, \'alfa\' );
你可以看到in the source 这个运行相同foreach 循环代码,但看起来更好一点。

SO网友:Jon

上述概括对我很有用:

$args = array( \'cat\' = -1 ); // e.g. to get list of posts in any category
$postobjs = get_posts( $args );
$postids = wp_list_pluck( $postobjs, \'ID\' );
$taxonomy = \'mytax\' // your taxonomy name
$termobjs = wp_get_object_terms( $postids, $taxonomy );
$termlist = array_unique( wp_list_pluck( $termobjs, \'name\' ) ); // distinct term names
它在“mytax”自定义分类中输出唯一的术语列表。感谢@mrwweb:-)