如何向每个用户显示自定义字段的运行总计?

时间:2014-05-07 16:57:09

标签: php wordpress

我首先将自己置于优秀人员的怜悯之下,作为php和stackoverflow的完整新手。我已经在这里和其他地方搜索过这个答案,而且我在拼凑它们时遇到了麻烦。

这是我的问题 - 我已经设置了一个表单(使用重力表单),登录的用户可以登录"飞行时间"每次飞行后。我使用重力表单将此数据发布到名为" my-flight-record"的自定义帖子中。我已经从表单中映射了所有字段。现在,我只是想向用户显示一个字段的运行总计,wpcf-total-flight-time,但我只想向用户显示他们自己的总时间。

这是我目前正在使用的代码,但它会对所有条目进行求和。我只想总结当前用户的条目(谁也应该在他们甚至可以看到此页面之前登录)。

<?php
//get current user
        global $current_user;
        get_currentuserinfo();

        $userPosts = get_posts(array('author' => $current_user->ID,      'post_type'=> 'my-flight-record')); 
        // loop to create array of ids by user
        foreach ($userPosts as $post) {
            setup_postdata($post);
            $ids[] = get_the_ID();
        }
        $idList = implode(",", $ids);

        $meta_key = 'wpcf-total-flight-time';//set this to your custom field meta key
        $allflighthours = $wpdb->get_col($wpdb->prepare("
                                          SELECT meta_value
                                          FROM $wpdb->postmeta
                                          WHERE meta_key = %s
                                          AND post_id in (" . $idList . ")", $meta_key));
        echo 'My total flight hours logged = ' . array_sum( $allflighthours) . '';  ?>

此代码会产生一个总数,但对于每个人而言,不仅仅是登录用户。此外,&#39; $ idList = implode(&#34;,&#34;,$ ids);&#39;行导致我的错误。

请帮帮我自己!我确定我遗漏了重要信息 - 让我知道我错过了什么!

2 个答案:

答案 0 :(得分:0)

首先,您需要检查用户是否已登录 wordpress文档中的一些例子

if(!is_user_logged_in()) {
         //no user logged in
      }

http://codex.wordpress.org/Function_Reference/get_currentuserinfo#Parameters

//get current user
        global $current_user;
if(is_user_logged_in()) {     
   get_currentuserinfo();

        $userPosts = get_posts(array('author' => $current_user->ID,      'post_type'=> 'my-flight-record')); 
        // loop to create array of ids by user
        foreach ($userPosts as $post) {
            setup_postdata($post);
            $ids[] = get_the_ID();
        }
        $idList = implode(",", $ids);

        $meta_key = 'wpcf-total-flight-time';//set this to your custom field meta key
        $allflighthours = $wpdb->get_col($wpdb->prepare("
                                          SELECT meta_value
                                          FROM $wpdb->postmeta
                                          WHERE meta_key = %s
                                          AND post_id in (" . $idList . ")", $meta_key));
        echo 'My total flight hours logged = ' . array_sum( $allflighthours) . ''; 
}

答案 1 :(得分:0)

为什么需要两个单独的数据库查询?试试这个:

<?php
//get current user
        global $current_user;
        get_currentuserinfo();

        $userPosts = get_posts(array('author' => $current_user->ID,      
                                     'post_type'=> 'my-flight-record'));
        //initialize an empty array
        $flight_hours = array();
        // loop to create array of ids by user
        foreach ($userPosts as $post) {
            setup_postdata($post);
            $flight_hours[] = get_post_meta(get_the_ID(), 'wpcf-total-flight-time', true);
        }
        printf('My total flight hours logged = %s ', array_sum( $flight_hours) ); ?>

正如ipauler在他的回答中所说,你应该实施一些错误检查,以确保有一个登录用户,并且wpcf-total-flight-time数据都存在且有效。