How do I display a user’s total comment count outside The Loop?
I use this code to display comment count inside the loop:
<?php global $wpdb; $user_id = $post->post_author; $where = 'WHERE comment_approved = 1 AND user_id = ' . $user_id ; $comment_count = $wpdb->get_var( "SELECT COUNT( * ) AS total FROM {$wpdb->comments} {$where} "); echo 'Comments: <strong>' . $comment_count . '</strong>'; ?>
That works fine inside the loop. In an attempt to make that code work outside the loop, I changed $user_id = $post->post_author;
to $user_id = get_the_author_meta( 'ID' );
but it did not work.
The closest that I have been is with this code:
<?php global $wpdb; $where = 'WHERE comment_approved = 1 AND user_id <> 0'; $comment_counts = (array) $wpdb->get_results(" SELECT user_id, COUNT( * ) AS total FROM {$wpdb->comments} {$where} GROUP BY user_id ", object); foreach ( $comment_counts as $count ) { $user = get_userdata($count->user_id); echo 'Comments: ' . $count->total . ' '; } ?>
However, this echos comment count for all users, like this: “Comments: 28 Comments: 11 Comments: 55” etc
What code can I use to show the user’s comment count outside the loop?
Advertisement
Answer
Try making a few things more global and getting the user data differently.
<?php global $wpdb, $post, $current_user; get_currentuserinfo(); $userId = $current_user->ID; $where = 'WHERE comment_approved = 1 AND user_id = ' . $userId ; $comment_count = $wpdb->get_var("SELECT COUNT( * ) AS total FROM {$wpdb->comments} {$where}"); echo 'Comments: <strong>' . $comment_count . '</strong>'; ?>
or in functions.php
<? function commentCount() { global $wpdb, $current_user; get_currentuserinfo(); $userId = $current_user->ID; $count = $wpdb->get_var(' SELECT COUNT(comment_ID) FROM ' . $wpdb->comments. ' WHERE user_id = "' . $userId . '"'); echo $count . ' comments'; } ?>
To call it
<?php commentCount(); ?>