如何根据自定义帖子类型获取meta_Value总数?

时间:2015-08-10 作者:user1462

我需要显示特定自定义帖子类型的投票总数。下面是一个示例wp_postmeta 表查找这些键/值:

meta_id post_id meta_key meta_value
22 4 vote 4
26 6 vote 0
27 7 vote 1
32 10 vote 10
假设第一行和最后一行是wp_postmeta 自定义帖子类型的行movies. 我怎样才能得到14的总数?

这是我尝试过的代码,但它不起作用。它似乎将所有帖子类型的值相加,而不仅仅是针对指定的自定义帖子类型。

function meta_val( $key = \'\', $type = \'post\', $status = \'publish\' ) {
  global $wpdb;

  $r = $wpdb->get_col( $wpdb->prepare( "
    SELECT pm.meta_value FROM {$wpdb->postmeta} pm
    LEFT JOIN {$wpdb->posts} p ON p.ID = pm.post_id
    WHERE pm.meta_key = \'%s\' 
    AND p.post_status = \'%s\' 
    AND p.post_type = \'%s\'
  ", $key, $status, $type ) );

  return $r;
}

function total_votes( $post_type ) {
  $votes = meta_val( \'vote\', \'movies\' );
  $sum = array_sum( $votes );

  return $sum;
}

2 个回复
最合适的回答,由SO网友:Eric Holmes 整理而成

可能不需要自定义查询,但我建议使用它而不是访问数据库:-一次用于WP\\U查询-一次用于每个post条目

然后用PHP手动计算出数学。用一条MySQL语句一次完成这一切。

select sum(PM.meta_value) from wp_postmeta PM
join wp_posts P on P.ID = PM.post_id
where P.post_type=\'page\'
    and PM.meta_key=\'test\'
使用上面的代码替换$r=... 与此一致:

$r = $wpdb->get_results( $wpdb->prepare( "
    SELECT SUM(pm.meta_value) FROM {$wpdb->postmeta} pm
    LEFT JOIN {$wpdb->posts} p ON p.ID = pm.post_id
    WHERE pm.meta_key = \'%s\' 
    AND p.post_status = \'%s\' 
    AND p.post_type = \'%s\'
  ", $key, $status, $type ) );
$r[0] 应该是您的总数。:)

SO网友:Abhik

试试这个,应该可以开始。。(但未测试)

function count_total_vote() {
    $args = array(
        \'post_type\' => \'post\', // Your post type
        \'status\'    => \'publish\',
        \'meta_key\'  => \'vote\', // Meta Key
    );

    $total = 0;
    $votes = new WP_Query( $args );
    if ( $votes->have_posts() ) {
        while ( $votes->have_posts() ) {
        $votes->the_post();
            $total += get_post_meta( get_the_ID(), \'vote\', true );
        }
    }

    echo $total;

}  
不需要对数据库进行自定义查询。

结束

相关推荐

$wpdb->Prepare的工作方式与MYSQL_REAL_EASH_STRING不同

我正在开发WordPress插件,最近我计划从SQL迁移到$wpdb. 我正在使用一个名为$wpdb->prepare 而不是mysql_real_escape_string 但它不起作用。以下是我尝试的内容:代码:echo $fetch_row; 输出:a: 5:{s:9:“task\\u name”;s:10:“立即备份”;s:9:“机制”;s:10:“singleCall”代码:echo mysql_real_escape_string( $fetch_row ) 输出:\