根据客人的评论计数为他们提供徽章

时间:2017-10-14 作者:William

我使用的是WPDiscuz,它只是默认wordpress评论系统的升级版本,没有什么特别之处。

目前,我正在使用上述代码获取用户基于其电子邮件的总评论:

add_filter(\'wpdiscuz_comment_author\', \'my_commentCount\', 10, 2);
function my_commentCount($author_name, $comment) {
    global $wpdb;
    $no_comment = "No comments";
    $one_comment = "One comment";
    $more_comments = "% comments";
     $count = $wpdb->get_var(\'SELECT COUNT(comment_ID) FROM \' . $wpdb->comments. \' WHERE comment_author_email = "\' . addslashes($comment->comment_author_email) . \'"\');
    $comment_text = my_comment_number_text($no_comment, $one_comment, $more_comments, $count);
        return $author_name .\' | <span class="wpdiscuz-comment-count">\'.$comment_text.\'</span>\';
}
function my_comment_number_text( $zero = false, $one = false, $more = false, $number = 0 ) {
    if ( $number > 1 ) { $output = str_replace( \'%\', number_format_i18n( $number ), $more); } elseif ( $number == 0 ) { $output = $zero; } else { $output = $one; } return $output;
}
在网上冲浪后,我发现了这个博客,它根据客人的评论数量为他们颁发徽章:

[已删除]

你知道我的博客有什么办法吗?

他们使用上面相同的代码来获取注释计数btw。

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

请不要使用addslashes来逃避SQL(这可能很危险),请使用$wpdb->prepare("SQL with %s placeholders", $string). 它将把数据放入占位符的。。。放置并处理转义,为您提供安全执行的SQL。

无论如何你的问题是如何根据评论数量为他们提供不同的背景颜色?

为什么不保持简单和变化

return $author_name .\' | <span class="wpdiscuz-comment-count">\'.$comment_text.\'</span>\';

$bgcolor = \'#CCCCCC\'; // default
if($count > 800) $bgcolor = \'#FF00FF\';
if($count > 500) $bgcolor = \'#00FFFF\';
if($count > 250) $bgcolor = \'#FFFF00\';
if($count > 100) $bgcolor = \'#800000\';
return $author_name . \' | <span class="wpdiscuz-comment-count" style="background-color: \' . $bgcolor . \';">\' . $comment_text . \'</span>\';
还是我完全没有抓住要点,没有理解你想做什么?

要操纵注释的左侧部分,可以执行以下操作

add_filter(\'wpdiscuz_after_label\', \'my_badgeCount\', 10, 2);
function my_badgeCount($html, $comment) {
    global $wpdb;
    $count = $wpdb->get_var( $wpdb->prepare(\'SELECT COUNT(comment_ID) FROM \' . $wpdb->comments . \' WHERE comment_author_email = %s\', $comment->comment_author_email) );
    if($count > 9) return $html . \'<img src="/wp-content/uploads/badge-great.png" alt="great user" />\';
    if($count > 6) return $html . \'<img src="/wp-content/uploads/badge-good.png" alt="good user" />\';
    if($count > 3) return $html . \'<img src="/wp-content/uploads/badge-ok.png" alt="ok user" />\';
    return $html;
}
显然,你必须适应环境和图像。还要注意$wpdb->prepare()的用法。它不仅更安全,我还发现它更容易阅读。

结束