WordPress中js_composer插件兼容PHP 8及以上版本的方案
解决方案:PHP8升级后WPBakery(js_composer)兼容问题及替代方案
一、临时修复短代码显示问题
停用js_composer后页面显示原始短代码,是因为WPBakery的短代码解析器未运行。可通过以下方式临时恢复页面可读性:
- 在主题的
functions.php末尾添加代码,隐藏未解析的WPBakery短代码(仅应急使用,不解决根本问题):
add_filter('the_content', 'hide_unparsed_vc_shortcodes'); function hide_unparsed_vc_shortcodes($content) { return preg_replace('/\[vc_[^\]]+\]/', '', $content); }
- 手动转换短代码:将页面内容复制到纯文本编辑器,批量替换常见WPBakery短代码为对应HTML结构后重新发布(操作前务必备份内容)。
二、修改内置js_composer插件兼容PHP8
该插件为主题内置(后台列表不可见),需直接修改文件,步骤如下:
- 备份文件:先将
/wp-content/plugins/js_composer整个文件夹复制到本地,避免修改出错。 - 针对性修复PHP8兼容性问题:
- 替换废弃的
create_function:PHP8已移除该函数,找到插件中所有使用create_function(...)的代码,替换为匿名函数。例如:
原代码:
替换为:$func = create_function('', $code);$func = function() use ($code) { eval($code); }; - 修复
each()函数调用:PHP8废弃了each(),替换为foreach循环。例如:
原代码:
替换为:while (list($key, $val) = each($array)) { ... }foreach ($array as $key => $val) { ... } - 处理严格类型错误:PHP8对变量类型要求更严格,根据报错提示补充未定义变量的初始化(如
$var = '';),或对类型不匹配的变量做强制转换。
- 替换废弃的
- 重新启用插件:修改后,可通过FTP上传修改后的文件夹覆盖原文件,或在数据库
wp_options表的active_plugins选项中添加js_composer/js_composer.php到激活列表。
三、替代插件推荐
若修改插件难度过高,可选择以下可视化编辑器替代:
- Elementor:拖拽式可视化编辑器,兼容性强,有工具可将WPBakery短代码转换为Elementor块(部分复杂布局需手动调整)。
- Beaver Builder:轻量型编辑器,操作简洁,提供专门的WPBakery迁移工具。
- Gutenberg(WordPress内置块编辑器):无需额外插件,手动复制页面内容并将短代码替换为对应块结构即可,适合布局简单的站点。
- SiteOrigin Page Builder:开源免费编辑器,支持自定义布局,对PHP8兼容性好。
注意:更换编辑器前,务必备份整个站点(数据库+文件),避免数据丢失。
内容的提问来源于stack exchange,提问作者Badr
相关产品推荐
相关产品推荐

