WordPress.org

Forums

Count all comments made on each author's posts (7 posts)

  1. heatstroke
    Member
    Posted 2 years ago #

    Hi everybody!

    I hope I the title is quite descriptive.

    I made a list of authors and I pull of the database some information about each author. I have even paginated the list and linked each author to a list with their posts.

    What I want to do now is retrieve the amount of comments each author recieved in all their posts. It is a sum of the comments from all the posts they wrote.

    I searched a lot the internet and all I could find is the count of comments the authors made.

    Can you help me?

    Thank you a lot! ;)

  2. Tara
    Volunteer Moderator
    Posted 2 years ago #

  3. heatstroke
    Member
    Posted 2 years ago #

    Thank you :)

    Although it doesn't seem to be what I want to achieve. That script retrieves all the comments each user has made. What I need is the "opposite": count the comments made each user's posts and sum.

    This way I pretend to show how important an author is in the web, because if his posts recieve a lot of comments, we believe they are good posts. So the more comments an author recieves on his posts, the better.

  4. Tara
    Volunteer Moderator
    Posted 2 years ago #

    That script retrieves all the comments each user has made. What I need is the "opposite": count the comments made each user's posts and sum.

    I don't know how to modify the code to fit to your needs.
    May be someone who is using it exactly the way you intend chime in.
    If not, just try playing with it.

    useful codex:
    http://codex.wordpress.org/Function_Reference/comments_number
    http://codex.wordpress.org/Function_Reference/wp_count_comments
    http://codex.wordpress.org/Function_Reference/the_author

  5. heatstroke
    Member
    Posted 2 years ago #

    Thank you Tara,

    I'll take a look at those links.

    For now I am searching an ugly way to do it, by making a query with multiple tables, involving wp_comments (where the column comment_post_ID is relevant), wp_posts (post_author column) and wp_users (ID).

    In wp_users I will get the user ID. After that, in wp_posts, I will find what posts belong to that user and finally, in wp_comments I will count how many comments belong to those posts.

    I don't really know how I am going to do that, but this is my plan for now :D

  6. heatstroke
    Member
    Posted 2 years ago #

    Hi everyone!
    I am back with a small piece of code. This is the main line to retrieve all the comments recieved on all posts published by an author XXX.

    <?php
    $comments_count = $wpdb->get_var( "SELECT SUM(comment_count) FROM $wpdb->posts WHERE comment_count!='0' AND post_author='XXX'");
    echo "<p>Comments count: {$comments_count}</p>";
    ?>

    So if you want to retrieve a bit more information, here is how I did it:

    <?php
    $number 	= 3;
    $paged 		= (get_query_var('paged')) ? get_query_var('paged') : 1;
    $offset 	= ($paged - 1) * $number;
    $order_by = 'post_count'; // 'nicename', 'email', 'url', 'registered', 'display_name', or 'post_count'
    $order = 'DESC';
    $avatar_size = 191;
    $blogusers = get_users('&offset='.$offset.'&number='.$number.'exclude='.$exclude.'&orderby='.$order_by.'&order='.$order);
    $users 		= get_users();
    $total_users = count($users);
    $total_query = count($query);
    $total_pages = intval($total_users / $number) + 1;
    
    foreach($blogusers as $q) {
    $u = get_the_author_meta('id', $q->ID);
    $comments_count = $wpdb->get_var( "SELECT SUM(comment_count) FROM $wpdb->posts WHERE comment_count!='0' AND post_author=".$u);?>
    
    <p><a href="<?php echo get_author_posts_url($q->ID); ?>"><?php echo get_avatar( $q->ID, $avatar_size); ?></a></p>
    <p>Name: <a href="<?php echo get_author_posts_url($q->ID);?>"><?php echo get_the_author_meta('display_name', $q->ID);?></a></p>
    
    <?php if (get_the_author_meta('description', $q->ID) != '') : ?>
      <p>Description:<?php echo get_the_author_meta('description', $q->ID); ?></p>
    <?php endif; ?>
    
    <p>Posts: <?php echo count_user_posts($q->ID);?></p>
    <p>Comments recieved on those posts: <?php echo $comments_count;?></p>
    <p></p>
    
    <?php } ?>
    
    <?php
    if ($total_users > $total_query) {
    echo '<div id="pagination" class="clearfix">';
    echo '<span class="pages">Pages:</span>';
      $current_page = max(1, get_query_var('paged'));
      echo paginate_links(array(
    		'base' => get_pagenum_link(1) . '%_%',
    		'format' => 'page/%#%/',
    		'current' => $current_page,
    		'total' => $total_pages,
    		'prev_next'    => true,
    		'prev_text'    => __('« Previous'),
    	'next_text'    => __('Next »'),
    		'type'         => 'plain',
        ));}
    echo '</div>';
    ?>

    This one retrieves the avatar with a link to all the posts of the author, the name, number of posts created and the cound of comments recieved on them.

    It also has a pagination code, so if you have plenty of users to list, you can display a limited amount at a time.

    Note this is not formatted. You should display the info in divs and give some CSS rules to them.

    Hope this helped someone ;)

  7. Tara
    Volunteer Moderator
    Posted 2 years ago #

    Thanks :)

Topic Closed

This topic has been closed to new replies.

About this Topic