Take the 2-minute tour ×
WordPress Development Stack Exchange is a question and answer site for WordPress developers and administrators. It's 100% free, no registration required.

I have a value that I'm trying to store as user meta for authors on my site. I need it to update itself every time the content of a post is viewed for that author. Here's as far as I've gotten but it isn't storing the value. I use this in functions.php.

function user_score() {
    global $bp;
    $author_id = $bp->displayed_user->id; // do stuff to get user ID

    $author_posts = get_posts( array(
      'author' => $author_id,
      'posts_per_page' => -1
    ) );

    $counter = 0;
    foreach ( $author_posts as $post )
    {
      $score = get_post_meta( $post->ID, 'ratings_score', true );
      $counter += $score;
    }
    update_user_meta( $author_id, 'user_score', $counter );
    if ($echo)
      echo $counter;
    return $counter;
}
add_filter('the_content','update_user_score');
function update_user_score($content){
  global $post;
  user_score();
  return $content;
}
share|improve this question
    
Do you have debugging information? –  s_ha_dum May 21 '13 at 21:20

2 Answers 2

untested but should work

   add_filter('the_content','update_user_score');
    function update_user_score($content){
        global $post;
        $counter = 0;
        $score = get_post_meta( $post->ID, 'ratings_score', true );
        $counter += $score;
        update_user_meta( $post->post_author, 'user_score', $counter);
        return $content;
    }
share|improve this answer
    
that only ads the value of ratings_score. What I need is for it to add the value of 'user_score()' which is the sum of all the 'ratings_scores'. Thats why I'm trying to make it run the function. –  Pollux Khafra Jun 19 '12 at 12:02
    
Why would we need the counter? there isn't any loop here.. –  Sisir Apr 16 at 4:32

I would use the action wp_footer. You could do something like below. You do not need to loop through all posts whenever a post is showing. Just add the current post score to user for the current post.

add_action('wp_footer', 'wpse55725_update_user_score');

function wpse55725_update_user_score(){
    if( !is_singular('post') )    
        return;    // only run for single post

    global $post;
    $current_score = get_user_meta( $post->post_author, 'user_score', true ); // get current score of the user
    $score_points = get_post_meta( $post->ID, 'ratings_score', true ); // score for the post
    $score = $current_score + $score_points; // add the score to users current score

    update_user_meta( $post->post_author, 'user_score', $score); // save it

}

Code not tested.

share|improve this answer

Your Answer

 
discard

By posting your answer, you agree to the privacy policy and terms of service.

Not the answer you're looking for? Browse other questions tagged or ask your own question.