如何对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
相关产品推荐
相关产品推荐

