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

如何计算WordPress近30天文章自定义字段distance的总和?

解决WordPress近30天跑步/骑行总里程计算问题

思路说明

你之前用query_posts获取文章的方式更适合内容展示,做聚合求和效率偏低,推荐两种更直接的实现方案:


方案一:循环文章累加里程(适合数据量小的场景)

用官方推荐的WP_Query替代query_posts,获取目标文章后逐个提取自定义字段值累加:

<?php
// 初始化总里程为0
$total_distance = 0;

// 构建查询参数
$args = array(
    'post_type' => 'post', // 若用自定义文章类型,替换为你的类型名称(比如'activity')
    'posts_per_page' => -1, // 取出所有符合条件的文章
    'date_query' => array(
        array(
            'after' => '-30 days',
            'inclusive' => true,
        ),
    ),
    'meta_key' => 'distance', // 指定目标自定义字段
);

$query = new WP_Query($args);

// 循环累加里程
if ($query->have_posts()) {
    while ($query->have_posts()) {
        $query->the_post();
        // 获取字段值,默认0避免空值报错
        $distance = get_post_meta(get_the_ID(), 'distance', true);
        $total_distance += is_numeric($distance) ? floatval($distance) : 0;
    }
    wp_reset_postdata(); // 重置查询上下文
}

// 输出结果
echo '近30天总里程:' . $total_distance . ' 公里';
?>

方案二:直接SQL查询求和(高效,适合数据量大的场景)

通过数据库聚合查询一次性计算总里程,省去循环过程:

<?php
global $wpdb;

// 计算30天前的时间戳
$thirty_days_ago = date('Y-m-d H:i:s', strtotime('-30 days'));

// 执行聚合查询,注意表前缀如果不是wp_需替换
$total_distance = $wpdb->get_var(
    $wpdb->prepare(
        "SELECT SUM(meta_value) FROM {$wpdb->postmeta}
         INNER JOIN {$wpdb->posts} ON {$wpdb->postmeta}.post_id = {$wpdb->posts}.ID
         WHERE meta_key = %s
         AND post_date > %s
         AND post_status = 'publish'",
        'distance',
        $thirty_days_ago
    )
);

// 处理空值情况
$total_distance = $total_distance ? floatval($total_distance) : 0;

// 输出结果
echo '近30天总里程:' . $total_distance . ' 公里';
?>

注意事项

  • 确保distance自定义字段存储的是纯数字(整数/小数),非数字内容会导致求和错误,方案一的is_numeric判断可过滤这类情况。
  • 若使用自定义文章类型,方案一需修改post_type参数;方案二可在SQL中添加AND post_type = '你的类型名称'条件。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.06 14:55:27