WordPress 限定显示评论者链接

标题想了好几天也没想出个合适的能概括本文要表达的意思,真是耗费了无数脑细胞啊。大致的意思是,你可以根据评论数来控制是否显示留言者的链接。比如说只有当评论者的评论数大于一万的时候才显示链接,如果小于一万则不显示。当然,一万只是说说而已。

这里评论数肯定要根据邮箱来统计了,于是最基本的思路就是根据邮箱来获取评论数,然后再根据评论数获取邮件链接,虽然能达到效果,但是非常不科学,这样每条评论都会去查询一次,非常耗费性能,对于个人博客来说可能影响不是很大,但是有更好的解决方案那最好就不使用这个方法了。

我的思路是把判断过程放在发布评论的时候,然后设置一个白名单,如果评论数大于指定数值,则把这个邮箱加入到白名单中。然后根据这个白名单来控制是否显示评论者的链接。这样就做到了性能最优。

功能代码

function fa_is_friend( $email = null , $num = 5 ){
    $count = get_comments(array(
        'author_email' => $email,
        'count' => true,
    ));

    return ( $count > $num );
}

function fa_update_friend_list( $comment_id ){
    $comment = get_comment($comment_id);
    $friend_list = get_option('friend_list') ? get_option('friend_list') : array();
    $email = $comment->comment_author_email;
    if ( fa_is_friend($email) && !in_array( $email , $friend_list) ) {
        $friend_list[] = $email;
        update_option('friend_list',$friend_list);
    }
}
add_action('comment_post', 'fa_update_friend_list');


function fa_show_friend_link( $return , $author, $comment_ID ){
    $comment = get_comment( $comment_ID );
    $email = $comment->comment_author_email;
    $friend_list = get_option('friend_list') ? get_option('friend_list') : array();
    if ( in_array($email,$friend_list) ) {
        return $return;
    } else {
        return $author;
    }
}
add_filter('get_comment_author_link','fa_show_friend_link',10,3);

fa_is_friend这个函数第二个变量num 就是控制显示的数量,根据你的需要酌情处理。

注意本方法仅适合使用the_author_link()来输出评论者昵称的主题,一般来讲,标准主题都会使用这个函数。如果你使用了自定义拼接的html 只需要再价格邮箱是否在白名单的判断即可。

如果添加了次功能代码,则之前所有的评论都是显示评论链接,只有当访客有了新的评论才会出发白名单的更新。


最后,还是那句话,如果你能用在你优秀的付费主题中,不妨也意思意思感谢下我。

23

Related Posts

Comments : 23

  1. 该评论为私密评论

    1. @synyan

      我的表单序列化是我自己写的。。有点问题,已经改进了。 ;-)

    2. @bigfa 好滴,赶紧把俺被关黑屋的评论都放出来吧。 :arrow:

    3. @synyan

      。。。还没做取消私密的功能。

  2. 这个……是鼓励人家多评论么?呵呵

  3. 非常有意思的功能~ 一定程度上可以增加评论量~ :mrgreen:

    1. @龙笑天 ;-) 贵站设置的限制是多少,5?

  4. 只需要再价格邮箱是否在白名单的判断即可。错别字 :x

    1. @Nopa

      不要在意这些细节。

发表留言

Post Comment