How to get the 5 most recent comments and each comment 5 most recent replies (children)

admin2025-01-07  3

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 ); ?> 

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 ); ?> 
Share Improve this question edited Jul 8, 2016 at 15:00 UXTE asked Jul 8, 2016 at 14:23 UXTEUXTE 1531 gold badge3 silver badges10 bronze badges
Add a comment  | 

1 Answer 1

Reset to default 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);
转载请注明原文地址:http://conceptsofalgorithm.com/Algorithm/1736255808a311.html

最新回复(0)