Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/260.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 自定义post元数据总和_Php_Wordpress - Fatal编程技术网

Php 自定义post元数据总和

Php 自定义post元数据总和,php,wordpress,Php,Wordpress,这应该非常简单 我有一个自定义的post类型:“装运”,带有一个自定义字段“装运成本” 我想计算所有货物的总成本 我已通过一篇帖子成功地将其输出到正确的数量: $totalcost = 0; $post_ids = [2583]; foreach( $post_ids as $post_id ) { $totalcost += (int) get_post_meta( $post_id, 'shipment_cost', true ); } echo $totalcost; 但当我尝

这应该非常简单

我有一个自定义的post类型:“装运”,带有一个自定义字段“装运成本”

我想计算所有货物的总成本

我已通过一篇帖子成功地将其输出到正确的数量:

$totalcost = 0;
$post_ids = [2583];
foreach( $post_ids as $post_id )
{ 
    $totalcost += (int) get_post_meta( $post_id, 'shipment_cost', true );
}
echo $totalcost;
但当我尝试在一个数组中使用所有装运的CPT时,结果是零

$shipments = array(
'post_type'     => 'shipment'
);
$totalcost = 0;
$post_ids = $shipments;
foreach( $post_ids as $post_id )
{ 
    $totalcost += (int) get_post_meta( $post_id, 'shipment_cost', true );
}
echo $totalcost;
我的出货量数组是错的,还是我只是用了错误的方法


谢谢

现在您似乎正在使用
$shippings
,因为它是一个post ID数组?您首先需要检索所有帖子ID:

$shipments = get_posts(array(
  'post_type' => 'shipment',
  'post_status' => 'publish'
));
由于上述内容将返回post对象,因此需要修改循环:

foreach ($shipments as $post) {
  $totalcost += (int) get_post_meta($post->ID, 'shipment_cost', true);
}
更好更快的方法可能是使用原始数据库查询来获取所有元值的总和:

$totalcost = $wpdb->get_col("SELECT SUM(pm.meta_value) FROM {$wpdb->postmeta} pm
                             INNER JOIN {$wpdb->posts} p ON p.ID = pm.post_id
                             WHERE pm.meta_key = 'shipment_cost' 
                             AND p.post_status = 'publish' 
                             AND p.post_type = 'shipment'");

这救了我的命!!我们一直在寻找一种解决方案,来解决Pods自定义帖子类型的总输入问题,该类型有一个用户可以输入数字的自定义字段。然后,我将代码包装在一个短代码中,以便在前端显示

function jobs_shortcode () {
$jobs = get_posts(array(
  'post_type' => 'pledged_job',
  'post_status' => 'publish'
));

$total = 0;
$post_ids = $jobs;

foreach ($jobs as $post) {
  $total += (int) get_post_meta($post->ID, 'jobs_pledged', true);
}

echo $total;
}   
add_shortcode( 'jobs', 'jobs_shortcode' );

谢谢大家!

谢谢!我使用了wp查询路线,它工作得很好。出于好奇,为什么在这种情况下原始查询更好?我对查询SQL非常陌生,并且已经准备好,通常使用wp查询比使用原始SQL查询更好。干杯很高兴它解决了你的问题。我的意思是,最好使用一个查询,而不是对每个帖子都提出请求。啊,好的,太好了。谢谢