三件小事

太久没管博客了,这次花了一中午好好设置了一下后台,主要做了三件小事:屏蔽垃圾评论、新评论微信通知和主题更新后保留 functions.php 自定义部分。做完之后仍有空余时间,干脆写一篇教程。

屏蔽垃圾评论

前几天登进博客后台,看到有数十条待审评论提示,心中一颤,以为辜负了如此多热情的来访者。仔细一看,全都是汽车保险一类的垃圾评论,还没考驾照的站长感觉受到了嘲讽。全部删掉之后也没在意,以为是几个月没登后台的时间里慢慢积累起来的。没想到今天中午,刚登进后台就发现又有几十条保险广告,怒而删之之后,懒人站长开始寻找根治垃圾评论的办法。

一开始本想用 WordPress 上常用的 ‎Akismet 插件解决问题(多说一句,这个插件本来是 WordPress 安装好后自带的插件之一,但当初站长认为自己的小站不会招来垃圾评论,因此就将其卸载了,没想到再小的网站也逃不脱泛滥的垃圾评论),但听说其强大是强大,但对数据库和 CPU 的压力很大,用着最低配主机的站长不敢托大,还是否决了这个方法。

插件不行,便用代码。由于垃圾评论通常是全英文的,而一个中文博客基本不会有只说英文的读者,于是只要屏蔽全英文评论便可阻止绝大部分垃圾评论。经过一番寻找,站长选择了如下代码:

  1. //禁止全英文评论
  2. function syz_comment_post( $incoming_comment ) {
  3. $pattern = '/[一-龥]/u';
  4. if(!preg_match($pattern, $incoming_comment['comment_content'])) {
  5. wp_die( "写点汉字吧,博主外语很捉急!Please write some chinese words for spam check!" );
  6. }
  7. return( $incoming_comment );
  8. }
  9. add_filter('preprocess_comment', 'syz_comment_post');

其中 wp_die() 函数括号中的提示可自由发挥(注意保留引号)。将上述代码放到 functions.php 的末尾即可。不过,若网站使用的是 Ajax 评论,使用 wp_die 函数可能会导致页面错位,这时需要将其改成 err。另外,站长参考的网站还提供了禁止全日文、俄文、阿拉伯文等语言评论的代码,原文链接请见文末。

新评论微信通知

WordPress 自带有新评论邮件通知功能,但接收邮件总有一定的延迟,再加上这个功能看起来很酷的样子(主要原因),因此也分享给大家。

这一功能使用了 Server 酱 的服务。

「Server 酱」,英文名「ServerChan」,是一款「程序员」和「服务器」之间的通信软件。

说人话?就是从服务器推报警和日志到手机的工具。

开通并使用上它,只需要一分钟:

  1. 登入:用 GitHub 账号登入网站,就能获得一个 SCKEY(在「发送消息」页面)
  2. 绑定:点击「微信推送」,扫码关注同时即可完成绑定
  3. 发消息:往 http://sc.ftqq.com/SCKEY.send 发 GET 请求,就可以在微信里收到消息啦

来个示意图:

scgif.gif

总之,服务都是别人搭建好的,自己只要按步骤设置就可以了。完成第二步绑定微信后,也将下列代码插入 functions.php 的末尾即可:

  1. //评论微信推送  
  2. function sc_send($comment_id)  
  3. {  
  4. $text = '博客上有一条新的评论';  
  5. $comment = get_comment($comment_id);  
  6. $desp = $comment->comment_content;  
  7. $key = '你的 SCKEY';  
  8. $postdata = http_build_query(  
  9. array(  
  10. 'text' => $text,  
  11. 'desp' => $desp  
  12. )  
  13. );  
  14.  
  15. $opts = array('http' =>  
  16. array(  
  17. 'method' => 'POST',  
  18. 'header' => 'Content-type: application/x-www-form-urlencoded',  
  19. 'content' => $postdata  
  20. )  
  21. );  
  22. $context = stream_context_create($opts);  
  23. return $result = file_get_contents('http://sc.ftqq.com/'.$key.'.send', false, $context);  
  24. }  
  25. add_action('comment_post', 'sc_send', 19, 2);

注意将“你的 SCKEY”替换为注册后获得的 SCKEY。

保留 functions.php 自定义部分

前面反复提到的 functions.php 究竟是什么东西?

模板函数.png

在 WordPress 里,它的中文名字是模板函数,属于主题的一部分。站长的理解是,它提供了一个主题所能提供的各种各样的功能,而用户可以通过修改它来实现更多的自定义功能。不过,它从属于主题的地位决定了一旦主题更新,此文件也会相应更新,用户自己编辑的部分就会丢失。当然,每次主题更新前将自定义部分备份一下不失为一个解决办法,但并不适合懒人站长(懒惰果然是第一生产力)。要是有无需手动备份,更新主题后自定义代码不丢失的办法就完美了。说干就干,经过一番搜索,站长找到了如下方法。

此方法原理是为 WordPress 引入其他 functions.php 文件。首先,将下面的内容保存为 UTF-8 格式的 php 文件,并起名为 functions-custom.php,放入跟主题的 functions.php 文件同一目录(注释部分可自行修改):

  1. <?php
  2. /**
  3.  * customize function of theme by xxx
  4.  * @author    xxx
  5.  * @site      xxx
  6.  * @copyright Copyright (c) 2018
  7.  * @link      http://www.xxx.com/
  8.  */
  9. ?>
  10. <?php
  11.  
  12. /* 在下面加入自定义函数 */
  13.  
  14. ?>

根据提示,在“/* 在下面加入自定义函数 */”下面添加需要到代码即可。

然后,在主题的 functions.php 文件末尾加入以下代码,并在每次主题更新后手动加入一遍:

  1. // 引入其它 functions.php 文件
  2. @include(TEMPLATEPATH.'/functions-custom.php');

新建的文件名可以自由发挥,只要保证在 functions.php 中的代码与其一致即可。

可以看到,这个方法并非全自动,仍需在主题更新后手动更改一次代码。其实也有将自定义函数制作成插件,从而不需要任何手动操作的办法。但出于对插件影响网站运行效率的担心,站长还是选择了使用代码的方法。若网站配置较高,可以考虑使用插件实现全自动运行,详情仍请见文末链接。


这学期实在是太过懒散,一学期也就发布了三篇文章。前两天是 一只萌新 的周年纪念,也没有写什么像样的文章。这篇教程,就当作是回归声明吧。

参考链接

https://qq52o.me/1723.html

https://cloud.tencent.com/developer/article/1024392

https://qq52o.me/1092.html

http://sc.ftqq.com/3.version

http://helongquan.github.io/2018/01/08/%E5%9C%A8%E6%9B%B4%E6%96%B0WordPress%E4%B8%BB%E9%A2%98%E6%97%B6%E5%A6%82%E4%BD%95%E4%BF%9D%E7%95%99functions-php%E9%87%8C%E7%9A%84%E8%87%AA%E5%AE%9A%E4%B9%89%E4%BB%A3%E7%A0%81/

发表评论

电子邮件地址不会被公开。 必填项已用*标注