最近更新了puock主题到2.9.2版,其他一切正常,但打开文章页面时出现Warning: Cannot modify header information错误:
Warning: Cannot modify header information - headers already sent by (output started at themes\puock\header.php:40) in themes\puock\inc\fun\core.php on line 202
上搜索引擎找方法,无法明确解决办法,后来问了豆包AI,原因和解决办法如下。
-
方法 1:用 PHP 输出缓冲(最推荐,改动最小)
通过 PHP 的输出缓冲功能,暂时把页面输出内容缓存起来,等 setcookie 执行完再统一输出,步骤如下:- 打开主题的
functions.php文件(路径:wp-content/themes/puock/functions.php); - 在文件最顶部(
<?php标签后第一行)添加以下代码:
// 开启PHP输出缓冲,解决header已发送问题 ob_start();- 保存文件,刷新文章页即可。
方法 2:调整 setcookie 执行时机(备选)
如果方法 1 无效,可修改core.php中 setcookie 的执行位置,确保它在页面输出前运行:- 打开
core.php文件,找到第 202 行的setcookie代码块; - 将这段 setcookie 代码剪切,粘贴到主题
functions.php文件的最顶部(ob_start()之后,若已加的话); - 示例(粘贴后的样子):
<?php // 开启输出缓冲 ob_start(); // 移动过来的setcookie代码 $key = '你的cookie键名'; // 保留原代码的变量定义 $seconds = 3600; // 保留原代码的过期时间 setcookie($key, '1', time() + $seconds, COOKIEPATH, COOKIE_DOMAIN, is_ssl(), true); // 以下是原functions.php的其他代码...验证修复效果
- 保存修改后的文件;
- 清空浏览器缓存,刷新文章页面;
- 查看是否还出现
Cannot modify header information警告; - 同时确认网站 logo 正常显示、Cookie 能正常设置(可通过浏览器开发者工具→Application→Cookies 检查)。
总结
- 最简方案:在
functions.php顶部添加ob_start();开启输出缓冲,无需修改报错行的代码; - 核心原理:输出缓冲会暂时缓存页面所有输出内容,等 Cookie 等头部操作完成后再统一发送到浏览器;
- 注意事项:若主题有多个
setcookie/header()操作,此方法可一次性解决所有同类报错。
- 打开主题的
正文完
发表至: 网络
近一天内