如何统计自定义分类法Actor下各演员的参演Movie数量?
解决演员参演电影数量统计的问题
Hey there! Let's get this sorted for you—since you're already using a custom post type movie and custom taxonomy actor, we're just a few lines of code away from showing each actor's movie count correctly.
方法一:利用get_terms直接获取关联数量(高效首选)
WordPress的get_terms函数可以直接返回每个分类(这里就是演员)关联的文章数量,我们只需要限定它只统计movie类型的文章就行:
// 获取所有演员分类,仅关联movie类型文章 $actors = get_terms(array( 'taxonomy' => 'actor', 'hide_empty' => false, // 设为true则只显示有参演电影的演员 'object_ids' => get_posts(array( 'post_type' => 'movie', 'posts_per_page' => -1, 'fields' => 'ids' // 只获取文章ID,提升性能 )) )); // 循环输出演员和对应的电影数量 if (!empty($actors) && !is_wp_error($actors)) { echo '<ul class="actor-movie-counts">'; foreach ($actors as $actor) { echo '<li>' . esc_html($actor->name) . ' - 参演电影:' . esc_html($actor->count) . ' 部</li>'; } echo '</ul>'; }
关键说明:
object_ids参数限定了只统计movie类型的文章,避免把其他文章类型的关联也算进去hide_empty控制是否显示没有参演任何电影的演员,根据你的需求调整
方法二:用WP_Query单独查询每个演员的电影数(灵活进阶)
如果需要更复杂的筛选逻辑(比如排除草稿状态的电影、按年份过滤等),可以对每个演员单独发起查询:
// 获取所有演员分类 $actors = get_terms(array( 'taxonomy' => 'actor', 'hide_empty' => false )); if (!empty($actors) && !is_wp_error($actors)) { echo '<ul class="actor-movie-counts">'; foreach ($actors as $actor) { // 查询该演员参演的所有movie $movie_query = new WP_Query(array( 'post_type' => 'movie', 'post_status' => 'publish', // 只统计已发布的电影 'tax_query' => array( array( 'taxonomy' => 'actor', 'field' => 'term_id', 'terms' => $actor->term_id ) ), 'posts_per_page' => -1, 'fields' => 'ids' // 只取ID,提升性能 )); // 输出结果 echo '<li>' . esc_html($actor->name) . ' - 参演电影:' . esc_html($movie_query->found_posts) . ' 部</li>'; wp_reset_postdata(); // 重置查询,避免影响后续内容 } echo '</ul>'; }
先确认一个关键前提!
要确保你的自定义分类法actor在注册时已经和movie类型关联,否则统计会出错。注册代码应该类似这样:
function register_movie_and_actor() { // 注册movie自定义文章类型 register_post_type('movie', array( 'label' => '电影', 'public' => true, 'has_archive' => true, // 其他参数... )); // 注册actor自定义分类法,关联movie register_taxonomy('actor', 'movie', array( 'label' => '演员', 'public' => true, 'rewrite' => array('slug' => 'actor'), // 其他参数... )); } add_action('init', 'register_movie_and_actor');
如果之前注册分类法时没指定object_type为movie,赶紧补上,否则分类和文章类型之间没有关联,统计自然不会正确~
希望这些方法能帮你搞定问题!如果还有细节需要调整,随时说。
内容的提问来源于stack exchange,提问作者scottiescotsman
相关产品推荐
相关产品推荐

