在尝试各种挂钩以尝试在主题加载其标题之前设置cookie之后。php文件(没有一个钩子起作用,即使是在“加载周期”的早期),我想我可能会暂时禁用该错误,以便可以设置cookie。我的回答基于this question.
现在,我意识到这不是一种标准的做法,可能也不推荐这样做,但我的理由是,如果主题没有“正常”或“正确”地执行操作,因此导致“headers ready sent”(标题已发送)错误消息显示在屏幕上,然后快速绕过错误显示(然后恢复任何错误捕获设置),这是一个在我的情况下都可以使用的解决方案。
从我的测试中可以看出,即使发生了“headers ready sent”,cookie也设置正确。这听起来似乎不应该奏效,但在我的测试中似乎奏效了。
所以,我使用的技术是
获取当前错误设置以供以后使用
关闭错误显示
执行导致错误的操作(在我的情况下,设置cookie)
将错误设置恢复为原始值
以下是我使用的代码。再说一次,可能不是“犹太教”,但在我的情况下是有效的。
// some themes cause a \'headers already sent\' message, so we bypass it here
// by turning off that error message while we set the cookie.
// see https://stackoverflow.com/a/26154061/1466973
// $random_guid is a guid set previously
$previousErrorLevel = error_reporting();
error_reporting(\\E_ERROR);
setcookie(\'cookie_name\', $random_guid,time()+(3600*24*30),\'/\');
error_reporting($previousErrorLevel);
由于它对我的情况有效,我将我的答案标记为正确,尽管另一个答案是有效的。我预计会有几票反对票,因为这不符合犹太教。但它解决了我的问题和环境。