按所有帖子的自定义字段值的总和列出用户

时间:2014-03-29 作者:Sarah

所以我可以按用户单独完成,但我不知道如何将其放入foreach循环中。

我要做的是输出如下内容:

作者,迈尔斯

其中miles是包含与该作者关联的自定义字段miles的每个帖子的总和。然后从最大到最小列出它们。

当用户查看自己的里程数时,我的代码如下所示:

    <?php
        //get current user
        global $current_user;
        get_currentuserinfo();
        // build query of ids by user
        $userPosts = get_posts(array(\'author\' => $current_user->ID, \'post_type\'=> \'miles\')); //change this
        // loop to create array of ids by user
        foreach ($userPosts as $post) {
            setup_postdata($post);
            $ids[] = get_the_ID();
        }
        $idList = implode(",", $ids); //tun this crap into a list

        $meta_key = \'miles\';//set this to your custom field meta key
        $allmiles = $wpdb->get_col($wpdb->prepare("
                                          SELECT meta_value 
                                          FROM $wpdb->postmeta 
                                          WHERE meta_key = %s 
                                          AND post_id in (" . $idList . ")", $meta_key));
        echo \'<p>You\\\'ve completed \' . array_sum( $allmiles) . \'</p>\';  ?>
我不知道如何复制这个,所以每个作者都会这样,以列表格式。。。想法??

1 个回复
最合适的回答,由SO网友:engelen 整理而成

出于性能原因,您最好编写自己的SQL查询。另一种选择是将里程分别存储在每个用户的自定义字段中。至于编写自己的SQL查询:您可以查询所有用户,然后加入他们的帖子,然后加入Posteta表。

之后,您可以使用SQLSUM-函数可获取每个用户在Posteta表中的英里数字段之和。

这将导致这样的查询(使用$wpdb):

global $wpdb;

$results = $wpdb->get_results( "
    SELECT
        us.ID,
        us.user_login,
        SUM( pm.meta_value ) AS mileage
    FROM
        {$wpdb->users} us
    JOIN
        {$wpdb->posts} po
        ON
        us.ID = po.post_author
    JOIN
        {$wpdb->postmeta} pm
        ON
        po.ID = pm.post_id
    WHERE
        pm.meta_key = \'miles\'
        AND
        po.post_status = \'publish\'
    GROUP BY
        us.ID
" );
我们开始从用户表中进行选择。在这之后,我们JOIN 所有帖子。通过使用GROUP BY 然后加入Post和Posteta,我们检索每个用户的所有miles Posteta条目。这允许我们使用SUM( pm.meta_value ) 在选择列时,我们可以得到每个用户的总里程数。

结束

相关推荐

Query date in wordpress loop

我目前有一个名为“事件”的自定义帖子类型。我根据这里的教程创建了这个http://tatiyants.com/how-to-use-wordpress-custom-post-types-to-add-events-to-your-site/. 我想查询日期,只显示日期即将到来的帖子,而不是过去的帖子。$event_date >= time然而,在教程中,他使用一个短代码显示结果。我正在尝试将其转换为标准wp循环,以便在索引中显示它。php。他在其短代码函数中使用以下内容:add_shortcode