如何修改计数函数统计非movie自定义文章类型的普通文章数量
解决分类计数排除自定义文章类型的问题
我明白你的需求——你想让分类小部件里的计数只统计普通文章(排除你创建的'movie'自定义文章类型),下面是具体的实现方案:
你可以通过WordPress的钩子来动态修改分类的计数,只保留普通文章的数量。把下面的代码添加到你的主题functions.php文件,或者自定义插件中:
add_filter( 'get_term', 'exclude_movie_post_type_from_category_count', 10, 2 ); function exclude_movie_post_type_from_category_count( $term, $taxonomy ) { // 仅针对内置分类分类法生效,避免影响其他自定义分类法 if ( $taxonomy !== 'category' ) { return $term; } // 尝试从缓存获取计数,提升性能 $cache_key = 'category_post_count_' . $term->term_id; $filtered_count = wp_cache_get( $cache_key ); if ( false === $filtered_count ) { // 查询该分类下仅普通文章(post类型)的已发布内容 $post_ids = get_posts( array( 'post_type' => 'post', 'posts_per_page' => -1, 'post_status' => 'publish', 'tax_query' => array( array( 'taxonomy' => 'category', 'field' => 'term_id', 'terms' => $term->term_id, ), ), 'fields' => 'ids', // 只获取ID,减少数据库负载 ) ); $filtered_count = count( $post_ids ); // 缓存计数1小时,避免重复查询 wp_cache_set( $cache_key, $filtered_count, '', 3600 ); } // 覆盖分类对象的原始计数 $term->count = $filtered_count; return $term; }
代码说明:
- 我们挂钩到
get_term过滤器,这个钩子会在WordPress获取分类对象时触发; - 首先判断当前处理的是内置分类,避免干扰其他自定义分类法;
- 使用缓存机制来优化性能,避免每次加载页面都重复查询数据库;
- 通过
get_posts精准查询分类下的普通文章,统计数量后覆盖分类的原始计数;
这样修改后,你的分类小部件就会像你期望的那样——比如'hobby'分类下显示5(仅普通文章数量),而不是包含'movie'类型的8篇总数。
内容的提问来源于stack exchange,提问作者jjycjn
相关产品推荐
相关产品推荐

