WordPress站点无法访问后台,出现Array to string conversion等报错求助
解决WordPress站点及后台的Array转字符串与Header报错问题
核心问题分析
报错根源是/htdocs/wp-includes/class-wp-widget.php第734行存在数组转字符串的强制转换操作,触发PHP警告。后台登录时的Cannot modify header information报错是连锁反应:警告信息先输出到页面,导致WordPress无法后续发送HTTP头(登录跳转依赖HTTP头)。
分步解决方案
1. 快速恢复后台访问
通过FTP或主机文件管理器操作:
- 方案A:禁用所有插件:将
wp-content/plugins目录重命名为wp-content/plugins_old,刷新后台页面。若恢复正常,说明是插件自带的小工具导致问题。 - 方案B:临时禁用所有小工具:编辑当前主题的
wp-content/themes/[你的主题名]/functions.php,在文件开头添加以下代码:
保存后刷新后台,即可临时禁用所有小工具,进入后台。add_action('widgets_init', function() { global $wp_widget_factory; $wp_widget_factory->widgets = array(); }, 100);
2. 定位具体出错的小工具
恢复后台后,逐步排查:
- 若用了方案A:把
plugins_old改回plugins,逐个启用插件,每启用一个刷新页面,直到报错重现,锁定对应的插件。 - 若用了方案B:删除添加的代码,进入外观→小工具,逐个添加小工具到侧边栏,刷新页面定位出错的小工具。
3. 修复小工具问题
找到问题小工具后:
- 检查小工具的设置项:是否有输入框被误填为数组格式(比如复制了带
[]或{}的内容),清空或修正为正常字符串。 - 若是插件/主题自带的小工具代码问题:
- 更新对应插件/主题到最新版本,看是否修复了该bug。
- 若无法更新,修改小工具的代码:找到小工具的PHP文件,在输出数据前添加数组判断,比如将
echo $value;改为:echo is_array($value) ? esc_html(wp_json_encode($value)) : esc_html($value);
4. 应急修复报错行(临时方案)
若暂时无法定位问题小工具,可先修改报错的class-wp-widget.php第734行,避免警告输出:
- 打开
/htdocs/wp-includes/class-wp-widget.php,找到第734行的代码(通常是输出小工具实例数据的语句)。 - 将原输出语句改为带数组判断的安全输出,例如:
保存后,警告会消失,header报错也会自动解决。// 假设原代码是 echo $instance['title']; echo is_array($instance['title']) ? esc_html(wp_json_encode($instance['title'])) : esc_html($instance['title']);
5. 验证修复效果
完成修复后,刷新前台和后台页面,确认所有报错消失,功能正常。
内容的提问来源于stack exchange,提问作者Geek Digitale
相关产品推荐
相关产品推荐

