如何在WP_Query自定义文章类型循环中获取分类法Term
错误原因
WP_Query的get_queried_object()方法返回的是整个查询对应的顶层对象,你当前的查询是拉取services类型的文章列表,查询的顶层对象就是services这个自定义文章类型本身,所以拿到的name自然是自定义文章类型的注册名称,和单篇文章关联的分类术语(term)没有关联。
修复方案
在循环内部通过get_the_terms()方法获取当前文章绑定的term即可,你需要先把代码中的分类法别名替换为你实际给services注册的分类法(示例中用service_category做占位,你改成自己的分类法别名就行):
$args = array( 'post_type' => 'services', 'post_status' => 'publish', 'posts_per_page' => 8, 'orderby' => 'title', 'order' => 'ASC', ); $loop = new WP_Query( $args ); while ( $loop->have_posts() ) : $loop->the_post(); // 获取当前文章关联的指定分类法下的所有term $terms = get_the_terms( get_the_ID(), 'service_category' ); if ( $terms && ! is_wp_error( $terms ) ) { // 如果只需要取第一个term就用下面的写法 $first_term = array_shift( $terms ); echo $first_term->name; // 如果要输出所有关联term可以遍历$terms数组 // foreach ( $terms as $term ) { // echo $term->name . ' '; // } } echo get_the_title(); endwhile; wp_reset_postdata();
- 如果单篇文章只会绑定一个对应分类法的term,直接取数组第一个元素即可,不需要遍历
- 如果需要获取多个分类法的term,多次调用
get_the_terms()传入不同分类法别名即可
内容的提问来源于stack exchange,提问作者Behseini
相关产品推荐
相关产品推荐

