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

如何获取WordPress自定义文章类型各年度的发布数量数组?

WordPress 自定义文章类型按年统计发布数量实现方案

这里提供两种可直接落地的实现方式,按需选择即可:


方式1:直接数据库查询(性能最优,推荐)

直接通过$wpdb执行分组统计查询,不需要处理多余的渲染逻辑,返回的结果可以直接作为图表数据源:

function get_papers_yearly_count() {
    global $wpdb;
    // 直接按年分组统计已发布的papers类型文章
    $raw_data = $wpdb->get_results(
        $wpdb->prepare(
            "SELECT YEAR(post_date) AS publish_year, COUNT(ID) AS post_count
            FROM {$wpdb->posts}
            WHERE post_type = %s
            AND post_status = 'publish'
            GROUP BY YEAR(post_date)
            ORDER BY publish_year DESC",
            'papers'
        ),
        ARRAY_A
    );

    // 转换为 [年份 => 发布数量] 格式的关联数组
    $yearly_count = [];
    foreach ($raw_data as $item) {
        $yearly_count[$item['publish_year']] = (int)$item['post_count'];
    }

    return $yearly_count;
}

调用get_papers_yearly_count()即可拿到你需要的数组,返回示例:
[2024 => 13, 2023 => 9, 2022 => 6]


方式2:改造get_archives()实现(兼容原有逻辑)

如果你不想直接写SQL,也可以通过关闭get_archives()的输出,自行解析统计结果:

// 获取按年归档的原始数据,关闭自动输出
$yearly_archives = get_archives([
    'type' => 'yearly',
    'post_type' => 'papers',
    'echo' => false,
    'format' => 'custom'
]);

$yearly_count = [];
// 正则匹配年份和对应发布数量
preg_match_all('/([0-9]{4}).*?\((\d+)\)/', $yearly_archives, $matches);
if (!empty($matches[1]) && !empty($matches[2])) {
    foreach ($matches[1] as $index => $year) {
        $yearly_count[$year] = (int)$matches[2][$index];
    }
}

这种方式兼容性更高,但性能略低于直接SQL查询,更适合文章量不大的站点使用。


注意事项

  • 如果需要统计草稿、待审等其他状态的文章,修改SQL中post_status的过滤条件,或者给get_archives()添加对应的post_status参数即可
  • 高访问量站点建议给查询结果加对象缓存,避免重复查询数据库

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.03 05:54:05