更换主机后出现array_push、headers already sent报错 无法登录WordPress后台求助
报错原因及修复方案
两个报错存在直接关联,核心问题出在session购物车的初始化逻辑错误:
Warning: array_push() expects parameter 1 to be array, string given报错直接原因:代码中直接将$_SESSION['cart']赋值为空字符串,而array_push()方法仅支持对数组类型变量操作,类型不匹配触发警告。Cannot modify header information是连锁报错:第一个警告提前输出到了页面内容中,导致WordPress登录流程后续需要发送的header头被阻断,最终无法进入后台。
你更换主机后才出现问题,是因为新主机的PHP错误提示等级配置更高,之前的主机大概率默认隐藏了warning级别的报错,问题早就存在只是没有暴露。
修复后的代码
将你主题functions.php里对应的代码段替换为如下内容即可:
function register_my_session() { if (!session_id()) { session_start(); } // 仅当购物车未初始化/非数组格式时初始化为空数组,避免每次请求清空购物车 if (!isset($_SESSION['cart']) || !is_array($_SESSION['cart'])) { $_SESSION['cart'] = []; } if ($_SERVER["REQUEST_METHOD"] == "POST") { array_push($_SESSION['cart'], $_POST); } } add_action('init', 'register_my_session');
调整说明
- 删掉了原来直接给
$_SESSION['cart']赋值空字符串的错误逻辑,改为仅当变量未初始化或者不是数组时才赋值为空数组,既解决了array_push的类型匹配问题,也避免了每次请求都清空购物车的逻辑bug - 空数组
[]写法兼容所有PHP7及以上版本,和传统array()写法效果完全一致
验证步骤
通过FTP或主机文件管理器进入站点wp-content/themes/pillshope/目录,编辑functions.php替换对应代码后,清除浏览器缓存即可正常登录WordPress后台,两个报错会全部消失。
内容的提问来源于stack exchange,提问作者Robert
相关产品推荐
相关产品推荐

