Обновить мета-автора пользователя при просмотре содержимого

У меня есть ценность, которую я пытаюсь сохранить как пользовательскую мета для авторов на моем сайте. Мне нужно, чтобы он обновлялся каждый раз, когда содержимое сообщения просматривается для этого автора. Вот насколько я получил, но он не сохраняет значение. Я использую это в 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; } 

Solutions Collecting From Web of "Обновить мета-автора пользователя при просмотре содержимого"

непроверенный, но должен работать

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

Я бы использовал действие wp_footer . Вы могли бы сделать что-то вроде ниже. Когда сообщение появляется, вам не нужно перебирать все сообщения. Просто добавьте текущий счет для пользователя для текущего сообщения.

 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 } 

Код не проверен.