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

如何对WP_Query返回记录的code_checks字段值求和?

解决方案

首先你原有的WP_Query参数存在问题——数组里重复定义了meta_key和meta_value,PHP会自动覆盖前面的键值对,导致实际只会匹配w3w_location_hit这个条件,full_name的条件直接失效。必须改成用meta_query来同时指定多个自定义字段的匹配规则:

$args = array( 
    'post_type' => 'hunters',
    'posts_per_page' => -1, 
    'orderby' => 'title', 
    'order' => 'ASC',
    'meta_query' => array(
        'relation' => 'AND', // 两个条件需同时满足
        array(
            'key' => 'full_name', // 注意你原代码里多打了空格,正确字段名应为full_name而非full_ name
            'value' => $email,
            'compare' => '='
        ),
        array(
            'key' => 'w3w_location_hit',
            'value' => $w3w,
            'compare' => '='
        )
    )
);
$loop = new WP_Query( $args );

关于将值存入数组后求和的问题

完全可以这么做,实现起来很直观:

$codeChecks = array();

if ( $loop->have_posts() ) {
    while ( $loop->have_posts() ) {
        $loop->the_post();
        // 获取字段值并强制转为数字,避免空值或非数字内容干扰求和
        $checkNum = (int) get_field('code_checks');
        $codeChecks[] = $checkNum;
    }
    wp_reset_postdata(); // 重置查询状态,避免影响后续全局循环

    // 计算数组内所有值的总和
    $totalChecks = array_sum($codeChecks);
    echo "总计进行了{$totalChecks}次代码检查";
} else {
    echo "暂无符合条件的记录";
}

另外也可以不用数组,直接在循环里累加,效率相差不大:

$totalChecks = 0;

if ( $loop->have_posts() ) {
    while ( $loop->have_posts() ) {
        $loop->the_post();
        $totalChecks += (int) get_field('code_checks');
    }
    wp_reset_postdata();
    echo "总计进行了{$totalChecks}次代码检查";
} else {
    echo "暂无符合条件的记录";
}

需要注意:

  • 用(int)强制转换字段值为数字,防止字段为空或存储了非数字内容导致求和错误
  • 循环结束后必须调用wp_reset_postdata(),恢复全局$post变量的原始状态

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.11 11:15:34