【问题标题】:How to count meta_key(s) of a page?如何计算页面的 meta_key(s)?
【发布时间】:2018-07-19 08:40:32
【问题描述】:

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

我有一个 post_id 为 44 的页面,每次用户在此页面上提交内容时,都会使用元键“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”的值,这是非常合乎逻辑的。它搜索带有元键“post_rating_0”的帖子,对它们进行计数,即 2 个帖子。

我要做的是计算一页中 meta_keys "post_rating_0" 的数量。

【问题讨论】:

  • 请告诉我们“post_rating_0”出现的代码
  • 我用目前得到的代码编辑了我的 aswer,但这还不包括特定页面的 meta_keys
  • 所以您想知道每个post_id 的所有post_rating_0 元数据的数量吗?像数组一样?
  • 您或许应该使用自定义查询,这样您就可以直接在查询中进行计数,而不必在之后遍历所有记录。您只需通过在 WHERE 子句中指定该页面的帖子 ID 将其限制在您感兴趣的特定页面。
  • 如果你想要 number 个条目,那你为什么要总结 values

标签: php wordpress foreach count meta


【解决方案1】:

修改后的代码将为您提供一个包含所有 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);

【讨论】:

  • 感谢您的回答,但这与以前完全相同。我从中得到了这个:数组( [343] => 1 [44] => 1 )。 343 是 page_id,44 是 page_id。所以结果又是 2。我想用页面的“post_rating_0”来计算meta_key。我知道 page_id 有超过 30 行的 meta_key "post_rating_0"
  • @user2812779,这个页面的post_type是什么?您确定此特定 ID 符合您的查询参数,即是一个页面并且已发布?
  • 页面的 post_type 为“page”并已发布。这就是数据库的样子。只想计算在 page_id 44 中有多少次 meta_key "post_rating_0"。imgur.com/RqFOc2X
  • @user2812779,为什么第三个参数of get_post_meta()为真?试试false - 查看更新的代码。 true 函数只返回单个值。
  • 相同结果...当前代码正在计算具有此元密钥的帖子...它必须完全相反。此页面有多少个带有“post_rating_0”的元键。
【解决方案2】:

做了一些更多的研究,并进行了一些修改,我设法让它工作了。这是最终代码:

                        $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;

【讨论】:

    【解决方案3】:
    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' 的帖子计数

    【讨论】:

      猜你喜欢
      • 2023-03-21
      • 1970-01-01
      • 1970-01-01
      • 2016-01-20
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-04-03
      相关资源
      最近更新 更多