自定义文章类型shipment的shipment_cost字段求和问题求助
问题分析与解决方案
嘿,我一眼就发现问题所在啦!你当前的代码里,$post_ids = $shipments这一步完全搞错了——$shipments只是WordPress查询的参数配置数组,根本不是实际的文章ID集合。你的foreach循环其实在遍历数组的键值对(比如键是post_type,值是shipment),用post_type当post ID去调用get_post_meta(),肯定拿不到有效数据,转成整数后就是0,总和自然一直是0咯。
你的核心思路(获取所有shipment类型文章、累加自定义字段值)是对的,只是缺少了「执行查询获取实际文章数据」这关键一步。下面给你两种可行的实现方案:
方案1:用WP_Query遍历文章ID(直观易读)
这是最符合WordPress开发规范的方式,适合数据量不大的场景:
// 构建查询参数,获取所有已发布的shipment文章(只取ID提升性能) $args = array( 'post_type' => 'shipment', 'post_status' => 'publish', 'posts_per_page' => -1, // -1表示取出所有符合条件的文章 'fields' => 'ids' // 只返回文章ID,减少内存占用 ); $shipment_query = new WP_Query($args); $totalcost = 0; // 遍历所有shipment的ID,累加成本 if ($shipment_query->have_posts()) { foreach ($shipment_query->posts as $post_id) { // 取出自定义字段值并转成整数后累加 $cost = get_post_meta($post_id, 'shipment_cost', true); $totalcost += (int)$cost; } } // 重置查询状态,避免影响后续WordPress查询逻辑 wp_reset_postdata(); echo $totalcost;
方案2:直接用SQL查询(性能最优)
如果你的shipment文章数量很多,循环遍历会消耗较多性能,直接从数据库查询总和是更高效的选择:
global $wpdb; // 直接查询数据库计算总成本 $totalcost = $wpdb->get_var( $wpdb->prepare( "SELECT SUM(meta_value) FROM $wpdb->postmeta WHERE meta_key = %s AND post_id IN ( SELECT ID FROM $wpdb->posts WHERE post_type = %s AND post_status = 'publish' )", 'shipment_cost', 'shipment' ) ); // 处理无数据的情况(避免输出空值) $totalcost = (int)$totalcost; echo $totalcost;
内容的提问来源于stack exchange,提问作者charliechina
相关产品推荐
相关产品推荐

