如何计算页面的meta_key?

时间:2018-07-19 08:40:32

标签: php wordpress foreach count meta

是否可以为相同的post_id计算相同的meta_keys的数量。

我有一个带有post_id 44的页面,每次用户在此页面上提交内容时,都会添加一个新的数据库规则,并带有meta_key“ post_rating_0”。

此页面现在有30多个规则,我想对它们进行计数。 对于其他页面,也是一样。

这可能吗?

到目前为止的

代码:

global $post;
$query_args = array(
            'post_type' => 'page',
            'post_status' => 'publish',
            'posts_per_page' => -1,
            'meta_key' => 'post_rating_0'
            // 'fields' => 'SUM(amount_to_paid)',
        );

$sum = 0;
$query = new WP_Query($query_args);
if ( $query->have_posts() ) {
    while( $query->have_posts() ) {
        $query->the_post();
        // do the processing for each post
        $sum = $sum + intval(get_post_meta(get_the_id(),'post_rating_0', true ));
    }
}
echo $sum ;

这是我到目前为止所得到的...但是这样做是回显“ 2”的值,这非常合乎逻辑。它搜索带有meta_key“ post_rating_0”的帖子,对它们进行计数,即2个帖子。

我想做的是计算一页中“ post_rating_0”的meta_keys的数量。

3 个答案:

答案 0 :(得分:0)

此修改后的代码将为您提供一个包含所有post_id以及相应数量的特定元数据的数组:

$meta_arr = array();
$query = new WP_Query($query_args);
if ( $query->have_posts() ) {
    while( $query->have_posts() ) {
        $query->the_post();
        $post_id = get_the_id();
        $meta_arr[$post_id] = intval(get_post_meta($post_id, 'post_rating_0', false));
    }
}

print_r($meta_arr);

答案 1 :(得分:0)

做了一些更多的研究,并进行了一些修改,使它开始起作用。这是最终代码:

                        $pagina_id_test = get_the_id();
                        // retrieve all meta_values with key 'post_rating_0' from database
                        $reviews_posts  = $wpdb->get_results("
                            SELECT meta_value FROM " . $wpdb->prefix . "postmeta
                            WHERE meta_key = 'post_rating_0'
                            AND post_id = $pagina_id_test", ARRAY_A);
                        // define reviews array
                        $reviews_count  = array();

                        // iterate through meta_values, count the occurence of each review
                        foreach ($reviews_posts as $reviews_post) {
                            if (isset($reviews_count[$reviews_post['meta_value']])) {
                                $reviews_count[$reviews_post['meta_value']] = $reviews_count[$reviews_post['meta_value']] + 1;
                            } else {
                                $reviews_count[$reviews_post['meta_value']] = 1;
                            }
                        }
                        // echo results
                        $aantal_reviews = 0;
                        foreach ($reviews_count as $review) {
                            $aantal_reviews++;
                        }
                        echo $aantal_reviews;

答案 2 :(得分:0)

global $wpdb;
global $post;
$post_id = $post->ID;

$c = $wpdb->get_row("SELECT COUNT(*) as NBR FROM {$wpdb->postmeta} 
WHERE post_id={$post_id} AND meta_key='post_rating_0' AND 
(SELECT ID FROM {$wpdb->posts} WHERE ID={$post_id} AND post_type='page') IS NOT NULL");

echo $c->NBR;

选择 post_type 是页面和 meta_key='post_rating_0'

的帖子数