安装Translatepress插件切换德语时出现preg_match未知修饰符报错
问题现象
- WordPress站点安装TranslatePress翻译插件后,使用默认原始语言时所有功能运行流畅无异常
- 将站点语言切换为德语时,页面抛出如下PHP警告:
Warning: preg_match(): Unknown modifier '!' in /homepages/2/d909770871/htdocs/clickandbuilds/Neffisso/wp-content/plugins/opal-widgets-for-elementor/includes/class-woo-elementor.php on line 109
问题根因
该报错和TranslatePress插件本身无直接关联,本质是opal-widgets-for-elementor(Opal Elementor小部件)插件代码编写不规范导致的兼容性问题:
- 该插件
class-woo-elementor.php文件第109行的preg_match()函数使用了动态拼接的正则表达式,且未对动态传入的字符串做正则转义处理 - 默认语言状态下,动态拼接进正则的文本内容不包含正则分隔符(通常为
/),正则可以正常解析,无报错 - 切换到德语等非默认语言时,TranslatePress会对页面文本做翻译替换,替换后的文本中恰好出现了和正则分隔符一致的字符,直接截断了正则表达式结构,导致后续的
!字符被PHP识别为不存在的正则修饰符,抛出警告。
解决方案
- 临时屏蔽报错:打开站点根目录下的
wp-config.php文件,将WP_DEBUG常量的值设置为false,关闭前端PHP错误输出,避免影响访客正常访问 - 代码层面永久修复:
- 通过服务器文件管理或者FTP工具,打开报错提示对应的文件:
/wp-content/plugins/opal-widgets-for-elementor/includes/class-woo-elementor.php,定位到第109行 - 找到该行的
preg_match()调用逻辑,对所有动态拼接到正则规则里的变量,使用preg_quote()函数做转义处理,转义时第二个参数传入当前正则使用的分隔符(通常为/)。例如原代码如果为preg_match('/' . $match_str . '!/', $content),则修改为preg_match('/' . preg_quote($match_str, '/') . '!/', $content) - 保存文件修改后,清空站点缓存、TranslatePress翻译缓存,切换德语语言验证即可
- 通过服务器文件管理或者FTP工具,打开报错提示对应的文件:
- 无代码基础替代方案:将
opal-widgets-for-elementor插件升级到官方最新版本,若最新版本仍未修复该兼容问题,可替换为功能相近的其他Elementor小部件类插件规避问题。
内容的提问来源于stack exchange,提问作者Hasan Chaudhry
相关产品推荐
相关产品推荐

