使用 AI 修复8年未更新已下架的 WP Chinese Conversion 繁简自动转换多语种中文插件

WP Chinese Conversion 是 Wordpress 知名的最多人使用的 繁简自动转换多语种中文插件,但是已经有超过8年未更新,已无法在 PHP 8 以上运行,于是我试着用 Cursor 等 AI 工具修复错误,替换已被淘汰的函数,使其能够在 PHP 8.4 上运行。

WP Chinese Conversion 曾经是 WordPress 平台上最好用的繁简自动转换的插件,只需要装一个这个插件,简体中文网站或者繁体中文网站可以瞬间变成繁简双版本的网站,并且难能可贵的是:两地的用词差异也可以自动转换。

繁简转换插件的诞生和现状

由于两岸文化背景的差异,不少用语有着明显的不同,例如大陆叫“内存”,台湾叫“记忆体”,大陆叫“网络”,台湾叫“网路”等等。维基百科中文版是有自动转换功能的,不仅可以转换字型,也包括用语。WP Chinese Conversion 就是使用了维基百科的这个转换做的实现。原作者是 Ono Oogami ,插件地址为:https://wordpress.org/plugins/wp-chinese-conversion/ 插件刚诞生时候非常流行,我记得那个年代的独立博客很多博主都会使用,不过该插件超过8年没有更新,2023年7月因为安全问题正式被下架。目前在 PHP7 上还是可以运行,不过 PHP7->PHP8 有很大的变化,包括有一些函数遭到了弃用,WP Chinese Conversion 插件已经无法继续在 PHP8 上运行。

想要继续使用怎么办?

我和我过去参与的一些兴趣小组过去有多个网站在使用 WP Chinese Conversion 插件并运作良好,但是因为这个插件的原因,PHP 只能运行在 7.4 版本无法升级,升级的话就会因为该插件而导致网站崩溃无法运作。然而该插件已经久未更新,作者自己的网站都打不开了,不过好在代码是开源的,但是我又不会写 php 的 wordpress 插件,怎么办呢?这时候我想到我们可以用 Calude 或者 Cursor 等 AI 工具来更新和维护这个插件,让它能运作在更高版本的 PHP 上。

设定目标和分解任务

具体目标很简单,要让 WP Chinese Conversion 这个插件能运行在 PHP 8 以上,这个 AI 很懂,我们大概规划一下路径:
  • 1. 保存最后一个原插件版本 v1.1.16,定档及存档
  • 2. 复制一份代码,定版为 v1.1.17,
  • 3. 使用 cursor 打开工程,并使用提示词让它修改为可以运行在 php 8.4上
  • 4. 更新 readme 文件,压缩并上传至测试站点运行
  • 5. 根据报错提示不断更新插件代码及 readme 文件

最后版本 v1.1.16 下载

原版插件的最后版本是 v1.1.16 我们未来所有的修改都基于此版本,并保存之前所有的记录和署名。未来做的所有修改也都会在 readme 中做记录。

准备启动 v1.1.17 版本

保存好之前的最好版本,复制一份代码,重命名文件夹为 v1.1.17, 使用 cursor 打开该文件夹
我使用的提示词是: 这是一个 wordpress 插件,目前最高只能在 PHP 7.4 运行,无法在PHP 8.4 运行,请帮我进行更新,让它可以在 PHP 8.4 运行
下面是 cursor 的输出:

好的,我会帮你将该 WordPress 插件适配到 PHP 8.4。
PHP 8.x 带来了许多不兼容的变更,常见的兼容性问题包括:

  1. 废弃的函数和特性(如 create_functioneachget_magic_quotes_gpc 等)。
  2. 变量和函数的类型要求更严格(如传参类型、返回类型、全局变量的初始化等)。
  3. 对象属性、方法的访问方式变化(如 parent::static::$this 的用法)。
  4. 数组和字符串的自动转换更严格
  5. 一些内置类和接口的签名变更(如 WP_Widget 构造函数)。
  6. 全局变量未初始化时的警告

我会分步进行适配,先定位常见的 PHP 8.x 不兼容点,然后逐步修复。


第一步:定位高危点

  • WP_Widget 子类的构造函数签名(PHP 8 要求 __construct,且父类构造函数要正确调用)。
  • str_get_html 相关的 simple_html_dom 兼容性(该库在 PHP 8 之前有很多兼容性问题)。
  • 全局变量未初始化直接使用(如 global $zh2Hans; if($zh2Hans == false),PHP 8 会报未定义变量)。
  • each()create_function()get_magic_quotes_gpc() 等函数是否被使用。
  • preg_replace/e 修饰符(已废弃)。
  • 变量和数组的未定义访问。
  • 传参类型、返回类型的严格性。

第二步:代码检查与修复

我会先检查 wp-chinese-conversion.php 文件中的高危点,然后再检查 simple_html_dom.phpZhConversion.php(如有需要)。

1. WP_Widget 构造函数

你的 Wpcc_Widget 类已经使用了 __construct,但父类调用方式需要确认兼容性。

2. 全局变量未初始化

如:

global $zh2Hans;
if($zh2Hans == false) {
    // ...
}

如果 $zh2Hans 未定义,PHP 8 会报错。应改为:

global $zh2Hans;
if(empty($zh2Hans)) {
    // ...
}

if(!isset($zh2Hans) || $zh2Hans == false) {
    // ...
}

3. simple_html_dom 兼容性

simple_html_dom.php 旧版本在 PHP 8 下有很多兼容性问题,建议升级到最新版,或用兼容补丁。

4. 其它函数和语法

  • 检查是否有 each()create_function()get_magic_quotes_gpc()preg_replace('/e') 等。
  • 检查数组和变量的未定义访问。

第三步:逐步修复

我会先修复 wp-chinese-conversion.php 文件中的高危点。
请确认你是否需要我一并检查和修复 simple_html_dom.phpZhConversion.php 文件?(如你用的是旧版 simple_html_dom,强烈建议升级或打补丁)

如果你有报错日志,也可以贴出来,这样我能更快定位问题。


接下来我会先修复 wp-chinese-conversion.php 文件中的高危点。 Ran tool Ran tool Ran tool Read file: wp-chinese-conversion.php Read file: wp-chinese-conversion.php Read file: ZhConversion.php Read file: ZhConversion.php Read file: ZhConversion.php Read file: ZhConversion.php Read file: ZhConversion.php Read file: ZhConversion.php Read file: ZhConversion.php Read file: ZhConversion.php Read file: ZhConversion.php Ran tool Read file: simple_html_dom.php Ran tool Ran tool Read file: simple_html_dom.php 经过详细分析,你的插件在 PHP 8.4 下主要有以下兼容性问题:


1. 全局变量未初始化直接使用

global $zh2Hans; if($zh2Hans == false),在 PHP 8+ 未定义变量会报错。
修复方法:改为 if(empty($zh2Hans))if(!isset($zh2Hans) || !$zh2Hans)


2. simple_html_dom.php 兼容性

你的 simple_html_dom.php 版本较老,大量方法未声明 public/protected/private,PHP 8+ 会警告。
修复方法:所有类方法都应加上 public,如 public function clear()
建议直接升级到 simplehtmldom 1.9.1+sunra/php-simple-html-dom-parser 兼容 PHP 8 的分支。


3. 其它 PHP 8 兼容性问题

  • 没有发现 each()create_function()get_magic_quotes_gpc()preg_replace('/e') 等废弃用法。
  • WP_Widget 子类构造函数已用 __construct,兼容 PHP 8。
  • 其它函数参数、返回值类型未见明显问题。

4. 建议的修复步骤

A. 修复全局变量未初始化问题

wp-chinese-conversion.phpconvert.php 里所有
if($zh2Hans == false)
改为
if(empty($zh2Hans))

if(!isset($zh2Hans) || !$zh2Hans)

B. simple_html_dom.php 兼容性修复

推荐方案:直接用新版 simple_html_dom.php 替换旧版,或手动为所有类方法加 public


5. 你需要的操作

  1. 是否需要我帮你自动修复 wp-chinese-conversion.phpconvert.php 的全局变量用法?
  2. simple_html_dom.php 建议直接升级,你是否需要我帮你用新版替换并适配调用?

请回复你的选择(如“全部自动修复”、“只修复主插件文件”、“simple_html_dom 用新版”),我会一步步帮你完成。
如有报错日志也可以贴出来,能更快定位细节问题。

cursor 给出了修改件以后,我选择“全部自动修复”,得到下列内容

已完成以下自动修复,确保插件兼容 PHP 8.4:


1. 全局变量未初始化直接使用问题

  • wp-chinese-conversion.phpconvert.php 中所有对 $zh2Hans$zh2Hant$zh2TW$zh2CN$zh2SG$zh2HK 的判断,全部改为 empty()isset(),防止未定义变量报错。

2. simple_html_dom.php 兼容性

  • 已为所有类方法加上 public 关键字,消除 PHP 8+ 的警告。
  • 如后续遇到其它兼容性问题,建议直接升级到官方最新版。

3. 其它

  • 你的插件未使用 PHP 8 已废弃的 each()create_function()get_magic_quotes_gpc()preg_replace('/e') 等特性,无需额外处理。
  • WP_Widget 子类构造函数已符合 PHP 8 要求。

你现在可以在 PHP 8.4 环境下测试插件。
如遇到任何新报错或警告,请将报错信息贴出来,我会继续帮你修复!

如需进一步升级 simple_html_dom.php 到最新版或有其它需求,也可以随时告知。

保存修改后的文件,压缩上传到测试的 WordPress 站点,可以运行,但是大事不妙,报错了。我得到2处如下报错信息,反馈给 cursor
第一个报错 : preg_match(): Compilation failed: invalid range in character class at offset 4 in /var/html/wp-content/plugins/wp-chinese-conversion/simple_html_dom.php on line 1364
第二个报错:Warning: Undefined array key “path” in /var/html/wp-content/plugins/wp-chinese-conversion/wp-chinese-conversion.php on line 635
Cursor 回复:

Read file: simple_html_dom.php Read file: simple_html_dom.php 已修复此报错:

  • 问题原因:preg_match("/^[\w-:]+$/", $tag) 中的 - 在字符类 [] 里未转义且不在首/末,PHP 7.3+ 会报“invalid range in character class”。
  • 解决方法:已将 - 移到字符类末尾,改为 preg_match("/^[\w:-]+$/", $tag),完全兼容 PHP 8。

你现在可以重新测试插件,报错应该已消失。如有其它新报错,请继续反馈!

现在基本可以了,我补充一句:请将版本号更新为 v1.1.17 同时将所有变更记录在 readme 文件中。一个新版本的可运行的 WordPress 插件就诞生了。点击下载,上传到你的 WordPress 网站即可使用。下次我们再试着更新和增加新的功能。
Adonisai

Adonisai

Keep in touch with our news & offers

Subscribe to Our Newsletter

Comments

Leave a Reply

您的邮箱地址不会被公开。 必填项已用 * 标注