WordPress子比主题评论拦截优化版无意义评论过滤

之前给WordPress子比主题做过一版评论拦截功能,用下来发现两个明显的小问题:要是开了百度内容审核API,原来的违禁词拦截得等API跑完才执行,白浪费不少调用资源;更头疼的是,像Java这种正常技术词汇,也会被硬生生判成违禁词。你学习本文就可以同时解决这两个问题,就是增加结巴分词和更改执行时机。
没错,在我发布文章之前,本文草稿状态增加了两天。因为我又把代码优化了一波,四大核心优化,重点解决:词库越大速度越慢,重复解析文件占用资源,重复词重复查询,三大痛点。核心升级包括:哈希查找替代嵌套循环、wp_cache+Redis 对象缓存、词级颗粒度缓存、内存友好设计。最终实现:速度、资源占用、复用性三重提升。比我之前用了几年的代码好(哭了)

本次的做法是替换主题原有函数,在 API 审核判断之前执行,效率高了很多,优先拦截无意义内容,及已有相同评论,其次就是违禁词的分词接入加违禁词拦截,这次焚决也交了哦(其实并没有)

一、功能亮点以及解决的核心问题

优化点解决的原版本问题
调整拦截执行时机旧版本在API审核后执行,浪费审核资源;现版本在 API 前拦截,优先过滤无效内容
接入结巴分词原版本直接遍历词库,易误判(如Java被拦截);现版本分词匹配,精准识别违禁词
多维度验证开关支持正则验证、重复评论拦截敏感词拦截独立开关,按需启用
缓存优化结果缓存1小时,降低特殊场景下的服务器资源消耗
管理员友好提示仅管理员可见配置错误信息,普通用户无感知,不影响体验

二、实现原理

  1. 替换主题原生函数:移除zib_ajax_submit_comment,替换为自定义函数wxs_zib_ajax_submit_comment,接管评论提交逻辑
  2. 前置验证流程:在API审核、权限判断前,执行自定义验证(正则+去重+敏感词
  3. 分层拦截逻辑:先过滤无意义内容→再拦截重复评论→最后精准匹配违禁词,任一环节失败则直接拒绝提交
  4. 缓存分词结果:对相同评论内容的分词结果缓存,避免重复计算
  5. 哈希查找替代嵌套循环:采用isset($map[$word])哈希查找,比对次数仅等于分词数(无论词库是1万还是10万,永远只比对10次),从“线性增长”变为“常数级”,彻底解决词库扩容带来的性能问题
  6. 内存替代硬盘:将解析后的哈希表$forbiddenMap存入wp_cache(建议开启Redis缓存),服务器仅在首次启动时解析一次文件,后续直接从内存读取缓存,彻底消除重复IO开销
  7. 词级颗粒度缓存:针对同一词多次出现场景(如不同评论都包含 “太空人”),每个分词首次查询后,会被打上safe/forbidden标签并缓存;后续无论评论内容如何变化,只要包含该词,直接从缓存获取状态,无需再查询哈希表,进一步降低查询成本。

三、部署步骤(核心操作)

这次没搞复杂的插件,就用主题推荐的自定义文件实现,可以更新免覆盖

创建func.php文件,保存核心代码

在主题目录创建func.php文件,首行写入<?php,再下一行填入以下代码(若已存在该文件,直接追加代码到末尾)

新注册的朋友,签到几天给的积分就可以拿下这个了。

核心代码,以下代码实现子比主题违禁词拦截功能,使用结巴分词避免误判Java等正常词汇:

功能开关配置

wxs_comment_validation函数中,你可以灵活控制评论优化功能开关,默认都是开启的,支持正则验证,相同评论拦截,敏感词拦截。

    $enable_regex_validation = true; // 是否启用正则验证
    $enable_duplicate_check = true;   // 是否启用相同评论验证
    $enable_sensitive_check = true;   // 是否启用敏感词拦截

wxs_validate_comment_patterns函数中,你可以修改增加正则,都是数组

图片[1]-WordPress子比主题评论拦截优化版无意义评论过滤-王先生笔记

wxs_check_for_bidden_words函数,你需要配置结巴分词的库,及敏感词库的位置,也可以默认

图片[2]-WordPress子比主题评论拦截优化版无意义评论过滤-王先生笔记

部署结巴分词及词库

查看以下文章,下载结巴分词库

目录结构验证,注意只要src目录:

src/
├── cmd/                  # 示例&工具脚本目录
│   ├── cn_to_zh.php      # 简繁转换示例
│   ├── demo.php          # 基础分词示例
│   ├── demo_custom_pos_tag.php # 自定义词性标注示例(未展示具体内容)
│   ├── demo_extract_tags.php # 关键词提取示例
│   ├── demo_mixed_cjk.php # 混合CJK文本分词示例(未展示具体内容)
│   ├── demo_posseg.php   # 词性标注示例(未展示具体内容)
│   ├── demo_tf_idf_pos.php # TF-IDF结合词性示例(未展示具体内容)
│   ├── demo_tokenize.php # 分词标注(tokenize)示例
│   ├── demo_user_dict.php # 自定义用户词典示例
│   ├── demo_tf_idf_pos.php # TF-IDF+词性示例(未展示具体内容)
│   └── gen_dict_json.php # 生成词典JSON(未展示具体内容)
├── model/                # 分词概率模型目录
│   ├── pos/              # 词性标注概率模型子目录
│   │   ├── prob_emit.json # 发射概率(未展示)
│   │   ├── prob_start.json # 词性标注初始概率
│   │   └── prob_trans.json # 词性标注转移概率(未展示)
│   ├── prob_start.json   # 分词初始概率
│   └── prob_trans.json   # 分词转移概率
├── vendor/               # 第三方依赖目录
│   ├── multi-array/      # 多维数组处理依赖
│   └── zhconverter/      # 简繁转换依赖
├── dict/                 # 词典/文本资源目录
│   ├── lyric.txt         # 歌词示例文本(关键词提取用)
│   ├── dict.test.txt     # 测试词典
│   ├── pos_tag_readable.txt # 词性标注说明(可读版)
│   ├── user_dict.txt     # 用户自定义词典
│   ├── stop_words.txt    # 停用词词典
│   ├── dict-ex.txt       # 简繁转换源文本(未展示内容)
│   └── dict-ex.zh.txt    # 简繁转换结果文本(未展示内容)
└── class/                # 核心类目录(Jieba/Finalseg等核心逻辑)
    ├── Jieba.php         # 核心分词类(路径引用可见)
    ├── Finalseg.php      # 最终分词类(路径引用可见)
    └── JiebaAnalyse.php  # 关键词分析类(路径引用可见)

你要拿到src目录的文件,然后将src改名为jieba

图片[3]-WordPress子比主题评论拦截优化版无意义评论过滤-王先生笔记

查看以下文章,下载违禁词库txt文件(横板英文逗号分隔)

两个都部署到如图位置,把它们放到子比主题的zidingyi目录里(自己建一个就行),路径是/wp-content/themes/zibll/zidingyi/,你也可以自己更改位置

图片[4]-WordPress子比主题评论拦截优化版无意义评论过滤-王先生笔记
违禁词库txt文件部署位置

主题后台设置

  • 登录WordPress后台→进入zibll主题设置
  • 找到扩展&增强网站安装设置项
  • 按下图开启对应开关,确保自定义拦截逻辑生效
图片[5]-WordPress子比主题评论拦截优化版无意义评论过滤-王先生笔记
子比主题评论审核开关设置

测试方法及注意事项

功能测试

  1. 管理员测试:用管理员账号发布包含违禁词、重复内容、乱码的评论,查看是否触发拦截提示(错误信息仅管理员可见)
  2. 普通用户测试:用普通账号测试,验证拦截逻辑生效且无配置错误提示

若有错误只有管理员账号会报错,代码还是挺健壮的

图片[6]-WordPress子比主题评论拦截优化版无意义评论过滤-王先生笔记
管理员测试评论拦截的反馈提示

注意事项

  1. 路径问题:务必确保分词库和敏感词库的路径与代码中$mulu变量一致
  2. 内存配置:代码中已设置内存上限为512MB,若服务器内存不足,可适当调整
  3. 缓存清理:修改敏感词库后,建议清理WordPress缓存,确保新词库生效
  4. 非子比主题禁用:此代码依赖子比主题原生函数,其他主题无法使用

进阶优化建议(焚决)

开启Redis(PHP扩展也要装),wp redis插件配置好即可,使用内存缓存,速度更进一步

如果你没有开启百度API内容审核,直接用上一个版本就好

FAQ常见问题

问题解决方案
提示结巴分词库不存在检查分词库文件路径是否正确,重新上传缺失的文件
普通用户评论无拦截效果确认主题后台开关已开启,且func.php文件代码无语法错误
开启API审核后,自定义拦截失效自定义拦截逻辑在API前执行,若拦截生效则不会触发API审核,属于正常现象
高并发下服务器卡顿启用Redis缓存优化wp_cache,或改用Go版本分词服务(自己写一款),本来做wp_cache就是为了防止有人刷评论攻击的

总结

本次针对WordPress子比主题评论拦截功能的优化,瞄准违禁词检测的性能瓶颈与资源消耗痛点,通过哈希查找替换嵌套循环、wp_cache+Redis对象缓存、词级颗粒度缓存三层改造,实现了常数级查询速度、零重复IO开销与近乎零成本的重复词检测,同时以内存友好设计保障高并发场景稳定运行。

这套方案彻底打破词库大小对检测速度的束缚,既节省API 审核资源,又显著提升评论拦截效率。其核心思路还可迁移至各类文本审核场景,具备极强的复用价值。

评论后可接收该文章的更新邮箱通知
友情赞助

如果你喜欢我的内容,可以赞助我哦!你的一点点心意,是我不断前进的动力!

原文链接(非王先生笔记发布均为盗版):https://wxsnote.cn/7350.html

温馨提示: 本文最后更新于2026-02-03 15:42:55,某些文章具有时效性,若有错误或已失效,请在下方留言或加入QQ群: 399019539 联系群主反馈。注意一些链接无法访问可能是你网络的原因,如Github,并非资源地址失效。
© 版权声明
THE END
喜欢就支持一下吧
点赞10 分享
WordPress子比主题评论拦截优化版无意义评论过滤-王先生笔记
WordPress子比主题评论拦截优化版无意义评论过滤
此内容为付费阅读,请付费后查看
600积分
付费阅读
已售 1
相关推荐
评论 共2条

请登录后发表评论

    请登录后查看评论内容

王先生笔记