如何列出评论者和自上次评论以来的天数

时间:2016-11-23 作者:Chris Rand

为了感谢数百位通过评论对我的博客作出贡献的人,我创建了一个页面,其中(1)列出了他们,以及(2)他们发表了多少评论。到目前为止,一切都很好!然而,最后一次接触会很好,那就是展示(3)自上次发布以来有多少天了,这就是我力所不及的地方。有什么好主意吗?

以下是我对工作部分的了解:

function top_comment_authors($amount = 250) {
global $wpdb;
$results = $wpdb->get_results(\'
    SELECT
    COUNT(comment_author) AS comments_count, comment_author
    FROM \'.$wpdb->comments.\'
    WHERE comment_author != "" AND comment_type = "" AND comment_approved = 1
    GROUP BY comment_author
    ORDER BY comments_count DESC, comment_author ASC
    LIMIT \'.$amount
);
$output = \'<div>\';
foreach($results as $result) {
    $output .= \'<p>\'.$result->comment_author.\' (\'.$result->comments_count.\' comments)</p>\';
}
$output .= \'</div>\';
echo $output;
}

2 个回复
最合适的回答,由SO网友:birgire 整理而成

看起来您可以添加

MAX( comment_date ) last_commented_date
到字段列表以获取最新日期,每个用户都发表了评论。

然后使用,例如human_time_diff() 函数获取每个用户评论的时间长度的可读文本。

human_time_diff( strtotime( $result->last_commented_date) ) 
出于安全原因,然后应使用$wpdb->prepare(), 因为它包含用户输入$amount.

SO网友:Chris Rand

非常感谢。发现此问题的任何其他人的最终(工作)代码:

function top_comment_authors($amount = 200) {
global $wpdb;
    $prepared_statement = $wpdb->prepare(
    \'SELECT
    COUNT(comment_author) AS comments_count, comment_author, MAX( comment_date ) as last_commented_date
    FROM \'.$wpdb->comments.\'
    WHERE comment_author != "" AND comment_type = "" AND comment_approved = 1
    GROUP BY comment_author
    ORDER BY comments_count DESC, comment_author ASC
    LIMIT %d\',
    $amount);
    $results = $wpdb->get_results($prepared_statement);
$output = \'<div class="comments">\';
foreach($results as $result) {
    $output .= \'<p class="comment-author">\'.$result->comment_author.\' &bull; \'.$result->comments_count.\' comments, last comment \'.human_time_diff(strtotime($result->last_commented_date)).\' ago</p>\';
}
$output .= \'</div>\';
echo $output;
}