WordPress站点从PHP7.4迁移至PHP8.0后计算器页面异常求助
一、初始PHP8.0兼容性修复
升级到PHP8.0后计算器无法正常显示结果,错误日志提示Undefined array key,这是因为PHP8.0对未定义数组/键的访问会抛出警告,而PHP7.4会静默处理。针对涉及的代码行修改如下:
- 第145行:添加键存在判断,或使用PHP7+空合并运算符简化:
// 写法1:isset判断 $total_days_trip = isset($_COOKIE['days_2']) ? $_COOKIE['days_2'] : $_COOKIE['days']; // 写法2:空合并运算符(更简洁) $total_days_trip = $_COOKIE['days_2'] ?? $_COOKIE['days'];
- 第184行:同样对表单数据键做存在判断:
// isset判断写法 $results[$company_id]['total_days'] = isset($post_form['days_2']) ? absint($post_form['days_2']) : absint($post_form['days']); // 空合并运算符写法 $results[$company_id]['total_days'] = absint($post_form['days_2'] ?? $post_form['days']);
- 第308行:先验证键存在再执行判断逻辑:
if(isset($post_form['option_to_person']) && $post_form['option_to_person']){ // 原有业务逻辑 }
二、移动端calc_idCookie缺失问题排查
桌面端修复后移动端仍报错Undefined array key "calc_id",核心原因是移动端浏览器Cookie策略更严格,按以下步骤排查修复:
1. 完善Cookie设置参数
当前Cookie代码缺少Secure和SameSite属性,这两个属性是移动端浏览器正常存储/发送Cookie的关键:
// 修改setcookie代码,补充安全属性 setcookie( 'calc_id', $calc_ID, [ 'expires' => time() + (86400 * 30), 'path' => '/', 'secure' => true, // HTTPS站点必须开启,HTTP测试环境设为false 'httponly' => true, // 可选,提升Cookie安全性 'samesite' => 'Lax' // 兼容大部分场景,也可根据需求设为'Strict' ] );
2. 确保AJAX请求携带Cookie
如果计算器通过AJAX提交数据,移动端浏览器默认可能不发送Cookie,需在前端AJAX配置中添加withCredentials参数(以jQuery为例):
$.ajax({ url: '/wp-admin/admin-ajax.php', type: 'POST', data: formData, xhrFields: { withCredentials: true }, // 其他请求配置 });
3. 验证Cookie写入状态
用移动端浏览器开发者工具(Chrome调试移动端或Safari网页检查),查看存储面板中的Cookie列表,确认calc_id是否存在、路径是否为/、域名是否匹配当前站点。
4. 排除隐私模式影响
移动端浏览器的隐私/无痕模式会限制Cookie存储,测试时先关闭隐私模式再验证功能。
内容的提问来源于stack exchange,提问作者AdamMes
相关产品推荐
相关产品推荐

