0

I want to get the 5 most recent comments and each comment's 5 most recent replies (children) in descending order. With the following code I can get the 5 most recents comments but it won't distinguish comments from replies which results in a list of comments independently of their 'type' (comment or reply). How can I do this?

<?php 

$comments = get_comments(array(
    'post_id'   => $id,
    'status'    => 'approve',
    'number'    => '5' //Number of comments
));

if ( have_comments() ) : ?>

<?php $args = array(
    'walker'            => null,
    'max_depth'         => '2',
    'style'             => 'div',
    'callback'          => customComment,   // templates/comment-template.php
    'end-callback'      => null,
    'type'              => 'all',
    'reply_text'        => 'Reply',
    'page'              => '',
    'per_page'          => '',
    'avatar_size'       => 32,
    'reverse_top_level' => false,
    'reverse_children'  => false,
    'format'            => 'html5',         // or 'xhtml' if no 'HTML5' theme support
    'short_ping'        => false,           // @since 3.6
    'echo'              => true             // boolean, default is true
); ?>

<?php wp_list_comments( $args ); ?> 

1 Answer 1

0

To list the most recent (5) comments you can use this code :

$sql = "SELECT DISTINCT ID, post_title, post_password, comment_ID, 
comment_post_ID, comment_author, comment_date_gmt, comment_approved, 
comment_type,comment_author_url, 
SUBSTRING(comment_content,1,50) // NUMBER OF CHARACTERS
AS com_excerpt FROM $wpdb->comments 
LEFT OUTER JOIN $wpdb->posts 
ON ($wpdb->comments.comment_post_ID = $wpdb->posts.ID) 
WHERE comment_approved = '1' 
AND comment_type = '' 
AND post_password = '' 
ORDER BY comment_date_gmt 
DESC LIMIT 5"; // NUMBER OF COMMENTS

$comments = $wpdb->get_results($sql);
$output   = $pre_HTML;
$output  .= "\n<ul>";

foreach ($comments as $comment) {
    $output .= "\n<li>"."<a href=\"" . get_permalink($comment->ID) . 
    "#comment-" . $comment->comment_ID . "\" title=\"on " . 
    $comment->post_title . "\">" .strip_tags($comment->comment_author) 
    .":<br/><div>" . strip_tags($comment->com_excerpt) 
    ."</div></a></li>";
}
$output .= "\n</ul>";
$output .= $post_HTML;

echo $output;
?>

It will output the comments in this HTML markup :

<ul>
    <li>
        <a href="http://domain.tld/post#comment-01" title="on Post Title">Comment Author:<br />
        <div>This is the first 50 characters of the first most recent comment</div></a>
    </li>
    <li>
        <a href="http://domain.tld/post#comment-01" title="on Post Title">Comment Author:<br />
        <div>This is the first 50 characters of the first most recent comment</div></a>
    </li>
    <li>
        <a href="http://domain.tld/post#comment-01" title="on Post Title">Comment Author:<br />
        <div>This is the first 50 characters of the first most recent comment</div></a>
    </li>
    <li>
        <a href="http://domain.tld/post#comment-01" title="on Post Title">Comment Author:<br />
        <div>This is the first 50 characters of the first most recent comment</div></a>
    </li>
    <li>
        <a href="http://domain.tld/post#comment-01" title="on Post Title">Comment Author:<br />
        <div>This is the first 50 characters of the first most recent comment</div></a>
    </li>
</ul>

But I am not sure how you can list the comment's children.. Maybe something like this should give you the first latest comment reply but you will have to tweak it in order to work :

$args = array(
    'status' => 'approve', 
    'number' => '5',
    'post_id' => $post_id,
    'parent' => $parrent

);
$comments = get_comments($args);
2
  • Thanks @knif3r but this does the same as my script above.
    – UXTE
    Commented Jul 8, 2016 at 16:27
  • Hi @UXTE did you tried to implement the third snippet of code (where parent is the reply parent (the original comment)? :)
    – knif3r
    Commented Jul 8, 2016 at 18:12

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

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