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

如何在WordPress中对ACF字段recog-price的数值求和?

WordPress中ACF字段数值求和实现方案

问题背景

使用WP_Query查询car自定义文章类型的ACF字段recog-price,能正常输出字段值,但尝试用array_sum求和时无效。通过var_dump发现该字段的value为字符串类型的数值(如"200000")。

原查询代码:

<?php
$income_query = new WP_Query(
                    array(
                        'post_type' => 'car',
                        'post_status' => 'publish',
                        'posts_per_page' => '-1',
                        'orderby' => 'date',
                        'date_query' => array(
                            'after' => 'today',
                            'before' => 'tomorrow - 1 second',
                            'inclusive' => true,
                        ),
                        'paged' => (get_query_var('paged')) ? get_query_var('paged') : 1
                    )
                ); ?>
                <?php
                if ($income_query->have_posts()): ?>
                <?php
                    while ($income_query->have_posts()):
                        $income_query->the_post(); ?>
                // Get field objects 
                <?php $field = get_field_object('recog-price');?>
               // Echo field value key 
               echo $field['value'];
<?php endwhile; ?>
                <?php endif; ?>

var_dump($field)结果片段:

array(27) 
{
     // ... 其他字段省略
     ["value"]=> string(6) "200000" 
     // ... 其他字段省略
}

解决方案

方法一:循环内累加(适配现有代码)

在循环外初始化求和变量,每次循环将字符串类型的数值转换为整数后累加:

修改后的完整代码:

<?php
$income_query = new WP_Query(
    array(
        'post_type' => 'car',
        'post_status' => 'publish',
        'posts_per_page' => '-1',
        'orderby' => 'date',
        'date_query' => array(
            'after' => 'today',
            'before' => 'tomorrow - 1 second',
            'inclusive' => true,
        ),
        'paged' => (get_query_var('paged')) ? get_query_var('paged') : 1
    )
); 

// 初始化求和变量
$total_price = 0;
?>

<?php if ($income_query->have_posts()): ?>
    <?php while ($income_query->have_posts()): $income_query->the_post(); ?>
        <?php 
        $field = get_field_object('recog-price');
        // 将字符串转换为整数后累加
        $price = intval($field['value']);
        $total_price += $price;
        
        // 保留原输出逻辑(可选)
        echo $field['value'];
        ?>
    <?php endwhile; ?>
    
    <!-- 输出总和 -->
    <p>总金额:<?php echo $total_price; ?> تومان</p>
<?php endif; ?>

<?php wp_reset_postdata(); // 重置查询数据,避免影响后续查询 ?>

方法二:直接查询数据库求和(性能更优)

无需循环所有帖子,直接通过$wpdb查询postmeta表计算总和,适合数据量较大的场景:

<?php
global $wpdb;

// 构建SQL查询,匹配car类型、发布状态、日期范围的recog-price字段总和
$total_price = $wpdb->get_var(
    $wpdb->prepare(
        "SELECT SUM(meta_value + 0) 
         FROM {$wpdb->postmeta} 
         JOIN {$wpdb->posts} ON {$wpdb->postmeta}.post_id = {$wpdb->posts}.ID
         WHERE meta_key = %s
         AND post_type = %s
         AND post_status = %s
         AND post_date >= %s
         AND post_date < %s",
        'recog-price',
        'car',
        'publish',
        date('Y-m-d 00:00:00'), // 今日开始时间
        date('Y-m-d 23:59:59', strtotime('+1 day')) // 明日结束时间
    )
);

// 输出总和
echo "<p>总金额:{$total_price} تومان</p>";
?>

说明:meta_value + 0会自动将字符串类型的数值转换为整数,避免直接SUM(meta_value)导致字符串拼接而非数值求和。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.11 03:10:48