You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何修改计数函数统计非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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.19 09:28:49