让垃圾评论远离你WordPress可以通过插件自动识别垃圾评论,比如官方的Akismet插件有强大的发垃圾评论,根据自有的数据库识别垃圾发布者,将垃圾评论放到垃圾站里。即使这样,还是不免遇到每天上百条垃圾评论蜂拥而至的情况,删到手疼。这时候,我们可以设置WordPress定时自动清空垃圾评论

 

自动清空垃圾评论

spam

这段代码会让WordPress每天清空一次垃圾评论,放在主题的functions.php中即可

add_action('delete_spam_daily_event', 'delete_spam_daily');

function delete_spam_daily_activation() {
	if ( !wp_next_scheduled( 'delete_spam_daily_event' ) ) 
		wp_schedule_event( time(), 'daily', 'delete_spam_daily_event');	
}

add_action('wp', 'delete_spam_daily_activation');

function delete_spam_daily() {
	global $wpdb;
	$wpdb->query( 
		$wpdb->prepare( 
			"DELETE FROM $wpdb->comments
			 WHERE comment_approved = %s",
			'spam' 
                )
	);
}

这段代码的思路如下

  1. 使用wp_schedule_event()函数注册一个cron hook,设置改hook每天执行一次
  2. 将函数delete_spam_daily()挂在到我们注册hook上(delete_spam_daily_activation),这样该函数每天执行一次,执行的内容是删除wp_comments表中comment_approved=spam的数据,这些都是垃圾评论。

使用Akismet自带功能

Akismet自带自动删除垃圾评论的功能,只是时间间隔比较长,只能选择每月删除一次

akismet

Akismet注册的scheduled event如下,是每天执行的

wp_schedule_event(time(), 'daily', 'akismet_scheduled_delete');

也可以直接挂载函数到akismet_scheduled_delete钩子上执行我们的任务。Akismet自己挂载了两个函数

add_action('akismet_scheduled_delete', 'akismet_delete_old');
add_action('akismet_scheduled_delete', 'akismet_delete_old_metadata');

函数akismet_delete_old负责删除垃圾评论,虽然这个scheduled event每天执行一次,但删除操作并不是每天执行,原因如下

//function akismet_delete_old()执行的sql语句
$comment_ids = $wpdb->get_col("SELECT comment_id FROM $wpdb->comments 
WHERE DATE_SUB('$now_gmt', INTERVAL 15 DAY) > comment_date_gmt 
AND comment_approved = 'spam'");

有兴趣的朋友可以研究下挂载函数到akismet_scheduled_delete上执行每天删除的操作。

定期清理评论回收站

评论回收站默认是30天清空一次,如果你觉得这个间隔太长,可以设置的短一点,例如每天清空。

只需要在wp-config.php中添加如下代码,可以让WordPress每天清空垃圾评论一次

define('EMPTY_TRASH_DAYS', 1 );

如果设置成这样

define('EMPTY_TRASH_DAYS', 0 );

则完全禁用垃圾评论功能。

9条留言

  1. 不错好东西,^_^。刚把定义设置好了,吧系统自动识别的垃圾移到垃圾筐里,。。。刚到这里又想起看看又没自动清理垃圾筐的代码。

  2. 我一个客户因为不知道用Akismet,把垃圾评论都审核出来了,有没办法已有的评论检查并标记为Spam然后一键清除?

    1. 这个我真没试验过,不过直接从数据库表wp_comments和wp_commentmeta里把评论都删除应该可以吧,如果你什么评论都不想要,网站内容也不多,这俩表直接清空了就完了。

  3. 引用:多谢留言,您的评论正在等待审核,请稍等^_^
    ————————————————————————
    居然还要审核?!你设置什么敏感词了?

    1. 所有没发表过评论的都审核,光靠Akismet不管用

  4. 我通过google找到这篇文章,觉得博主的这篇文章还是不错的,但是博主的“文章目录”我很不喜欢。如果把它做成自动隐藏在屏幕左侧栏的话会好很多。

    1. 不喜欢就忽略呗,我的blog是实验性的,有好玩的东西就试验一下,my notebook而已。
      如果不想看到,把浏览器拽窄一点,或者点下阅读模式,那东西就没了,有用的没用的都没了。

  5. 文章底部版权信息那块,头像被挤得好难受!!
    ps:ie8

    1. 果然,多谢你告诉我哦。很久不用IE了,总是拿这网站做实验,看来以后还得注意一下哎

评论功能已关闭