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

WordPress特定slug分类法求和:多同名奖牌分类计数实现方案

解决WordPress分类中同类型奖牌数量统计问题

方法一:通过WordPress内置函数遍历统计

你可以先获取目标分类法下的所有分类项,筛选出slug包含对应奖牌关键词的分类后,累加它们的关联运动员数量:

function count_medal_total($medal_slug_prefix) {
    $total = 0;
    // 替换成你的自定义分类法名称,比如'medals'
    $terms = get_terms(array(
        'taxonomy' => 'medals',
        'hide_empty' => false, // 统计所有分类,包括无关联文章的
    ));

    foreach ($terms as $term) {
        // 检查slug是否以指定前缀开头(比如gold、silver、bronze)
        if (str_starts_with($term->slug, $medal_slug_prefix)) {
            $total += $term->count;
        }
    }
    return $total;
}

// 使用示例:统计所有金牌数量
$gold_total = count_medal_total('gold');
echo '金牌总数:' . $gold_total;

// 统计银牌
$silver_total = count_medal_total('silver');
// 统计铜牌同理

如果你的PHP版本低于8.0,str_starts_with无法使用,替换成substr($term->slug, 0, strlen($medal_slug_prefix)) === $medal_slug_prefix即可。

方法二:直接数据库查询(效率更高)

如果分类数量较多,遍历所有分类会有性能损耗,直接用SQL查询更高效:

function count_medal_total_db($medal_slug_prefix) {
    global $wpdb;
    $taxonomy = 'medals'; // 替换为你的分类法名称
    $prefix_length = strlen($medal_slug_prefix);
    
    $total = $wpdb->get_var($wpdb->prepare(
        "SELECT SUM(t.count) FROM {$wpdb->terms} t
        JOIN {$wpdb->term_taxonomy} tt ON t.term_id = tt.term_id
        WHERE tt.taxonomy = %s
        AND SUBSTRING(t.slug, 1, %d) = %s",
        $taxonomy, $prefix_length, $medal_slug_prefix
    ));
    
    return $total ? $total : 0;
}

// 使用示例
$gold_total = count_medal_total_db('gold');

优化建议:别再用重复分类了!

你现在创建gold-2、gold-3这类分类的做法并不合理,WordPress不允许重复分类名,但你可以用更优的方案:

  • 分类元数据:给每个分类添加medal_type元字段,标记是金牌、银牌还是铜牌,统计时直接按元字段筛选,无需依赖slug命名。
  • 自定义字段:直接在运动员文章里添加gold_medals、silver_medals、bronze_medals数字字段,统计时直接求和所有文章的对应字段值,比分类统计更灵活。
  • 分类层级:创建父分类金牌,将不同的金牌分类设为子分类,统计时直接求和父分类下所有子分类的数量。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.18 20:05:34