You need to enable JavaScript to run this app. WordPress taxonomy.php页面如何统计近7天各子术语关联的文章数
优惠活动
大模型
产品
解决方案
定价
更多

WordPress taxonomy.php页面如何统计近7天各子术语关联的文章数

分类法归档页面近7天发文数统计实现

核心说明

$term->count 是WordPress核心维护的全量关联文章计数,存储了对应术语下所有公开文章的总数量,没有内置参数可以直接将其过滤为「仅近7天发布」的统计值。强行通过全局钩子修改这个全局计数,会影响站点所有调用术语计数的场景,带来不可控的兼容风险,正确的实现方式是针对每个子术语单独发起带筛选条件的查询,获取匹配的文章数量。

具体实现

替换原代码中直接输出$term->count的逻辑,同时修复原代码嵌套循环时变量覆盖的问题,完整可运行的代码如下:

$taxonomy = get_query_var('taxonomy');
// 计算近7天的时间起点
$seven_days_ago = strtotime('-7 days');

// 获取当前分类法下的顶级主术语
$terms = get_terms( $taxonomy, 
    array( 
        'orderby'    => 'name',
        'hide_empty' => false // 即使没有近期文章也展示对应子术语,可根据需求调整
    ) 
);

// 遍历展示主术语
foreach ( $terms as $main_term ) {
    echo '<h2 class="text-center">' . esc_html( $main_term->name ) . '</h2>';

    // 获取当前主术语下的所有子术语ID
    $child_term_ids = get_term_children( $main_term->term_id, $taxonomy );
    
    echo '<ul class="lesson-categories">';
    // 遍历所有子术语
    foreach ( $child_term_ids as $child_term_id ) {
        $child_term_obj = get_term_by( 'id', $child_term_id, $taxonomy );            
        echo '<li>';
        echo esc_html( $child_term_obj->name );

        // 计算当前子术语下近7天的发布文章数
        $recent_posts = new WP_Query( [
            'post_type' => 'post', // 按需替换为你实际使用的文章类型
            'post_status' => 'publish',
            'posts_per_page' => -1,
            'fields' => 'ids', // 仅返回文章ID,降低内存占用
            'date_query' => [
                [
                    'after' => date('Y-m-d', $seven_days_ago),
                    'column' => 'post_date'
                ]
            ],
            'tax_query' => [
                [
                    'taxonomy' => $taxonomy,
                    'field' => 'term_id',
                    'terms' => $child_term_id,
                    'include_children' => false // 不递归把子层级的文章算进当前计数
                ]
            ]
        ] );
        // 输出近7天的新增文章数
        echo ' <span>(近7天新增:' . (int)$recent_posts->found_posts . ')</span>';

        echo '</li>';       
    }
    echo '</ul>';
}

优化建议

  • 如果站点流量较高,可将每个子术语的近7天计数存入对象缓存,设置1小时左右的过期时间,避免每次页面加载都重复执行多轮数据库查询,拖慢页面响应速度
  • include_children参数可根据业务需求调整:如果希望子术语关联的文章数递归计入父层级统计,可将该值修改为true
  • 代码中增加了基础的输出转义,避免特殊字符引发的安全问题

内容的提问来源于stack exchange,提问作者george

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.28 19:06:04