最近wordpress更新了puock主题到2.9.2版,其他一切正常,但打开文章页面时出现Warning: Cannot modify header information错误:

Warning: Cannot modify header information - headers already sent by (output started atthemes\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() 操作,此方法可一次性解决所有同类报错。

标签: none

上一篇: 擒逆安邦
下一篇: 处理IP攻击

添加新评论