有朋自远方来,不亦乐乎。
wordpress简单实现评论白名单功能
原创 橘子书  发布于 8个月前 ( 02-28 ) 阅读: 1,422 次 评论: 14 条 A+

最早给网站写功能还得追溯到几年前,那时候懒得管理自留地,便索性写了一个评论白名单功能。后来在写leo主题的时候,我顺手将这个功能给移植进来了,只不过功能代码被我简化了很多,甚至可以说是‘怎么偷懒就怎么简化代码,只要能实现该功能就行’。

关于这个让人头疼让人吐槽、也让部分博主喜欢的评论白名单功能,看似很铁面无私,但其实它就几行代码便可以搞定。

一、白名单列表

在functions扔进以下代码:

/*
*定义白名单
*龙砚庭https://loomob.com
*/
function lyt_white_list_check($email) {//用邮箱作为判断依据
	$white_list = array_filter( explode( ',', trim(get_option('lyt_white_list'), ',' ) ) );//请根据自用主题的后台选项修改get_option
    if ( !empty($white_list) && in_array($email, $white_list) )
      return true;

    return false;
  }

这里有两个地方需要注意,一是$email,二是get_option。请根据自用主题的实际情况来修改,这里不做细表。

二、执行机制

同样还是扔到functions。

/*
*白名单内指定url可评论,且指定某页面与文章过滤此规则。
*龙砚庭https://loomob.com
*/
function white_list_spam($comment) {
    $postsid = get_option('lyt_whitelist_id'); //自定义过滤的页面、文章ID
    define('ALLOW_PAGES', ''.$postsid.'');
    $post_ID = $comment["comment_post_ID"];
    $allow_posts = ALLOW_PAGES ? explode(',', ALLOW_PAGES) : array();
    if(!in_array($post_ID,$allow_posts)){
    if (!lyt_white_list_check($comment['comment_author_email'])) {//通过邮箱判断
        err(__('对不起,您的网站不在龙砚庭博客的评论白名单之内,请邮件联系站长'));//err或者wp-die
    }  
    }
        return $comment;   
}
add_filter('preprocess_comment','white_list_spam');

三、后台选项函数

为了可视化,便于后台直接操作,我们还需要给后台主题选项写一个白名单列表函数,以及过滤页面、文章ID的函数

lyt_white_list

lyt_whitelist_id

如果你的主题后台选项框架使用的是下面这个轻量级后台框架:

轻量级主题后台框架

折腾主题,免不了要接触到主题的后台框架。 有能力的大神自己写,惰惫的大神二开或者套用市面上的开源主题框架。至于小白...

发布时间:2017/06/26 作者:橘子书 评论:4

那么请直接采用以下代码,放到theme-options.php里面合适的位置。

    array(
        'name'  => '评论白名单列表',
        'desc'  => '请输入邮箱,并以英文逗号隔开',
        'id'    => 'lyt_white_list',
        'type'  => 'textarea',
    ),
    array(
        'name'  => '评论白名单过滤ID',
        'desc'  => '请输要过滤的页面、文章ID,并以英文逗号隔开',
        'id'    => 'lyt_whitelist_id',
        'type'  => 'textarea',
    ),

教程到此结束,剩下的就是在日常运维的时候,慢慢扩充白名单列表。当然,以上白名单列表的实现方式是目前我觉得最简单、便捷的代码,至于更复杂的代码我就不贴了,因为能够实现功能就行,不信你试试!

题外教程

在老古(boke112)的个人博客,看到他贴的一段代码,发现只需要对其进行简单的修改,应该也能实现评论白名单功能。

那么如何修改呢?

请将以下代码扔到functions(具体运行的结果如何,我还没试过,回头我本地扔着玩试试。

/*
*评论白名单内的邮箱地址无需审核
*龙砚庭https://loomob.com
*/
$white_list = get_option('lyt_white_list');
define('ALLOW_EMAILS', ''.$white_list.'');
function lyt_approved_comment($approved,$commentdata){
    $email_ID = $commentdata['comment_author_email'];
    $approv_emails = ALLOW_EMAILS ? explode(',', ALLOW_EMAILS) : array();
    if (!$approved) {
        if (in_array($email_ID,$approv_emails)) {
            $approved = 1;
        }
    }
    return $approved;
}
add_action('pre_comment_approved', 'lyt_approved_comment', 10, 2);

然后跟步骤三一样,写一个后台选项的函数。日常使用的话,请参照以下范例:

aa@bb.com,cc@dd.com

效果如何?我也不知道!别问为什么,因为我懒!

END.

Principle Team
龙砚庭官方QQ群,做真正意义上的社群!
7人已关注

目前评论:14   其中:访客  8   博主  6

发表评论

莫慌,小狮子正在努力加载评论...
  1. 品牌馆
    品牌馆1 ( 2018.03.19 10:07:21 )  6楼

    你这主题变化很快啊,一天一个样子,厉害了