我无法通过WordPress主题正确设置cookie。我将以下代码放在functions.php
我的主题页面。
function set_cookie() {
if (isset($_GET[\'id\'])) {
$referrerID = $_GET[\'id\'];
setcookie(\'referrerid\', $referrerID,time()+ 3600 * 24, COOKIEPATH, COOKIE_DOMAIN, false);
}
}
add_action( \'init\', \'set_cookie\');
我甚至使用JavaScript来警告脚本是否到达了函数(它做到了)。
为什么我的cookies没有设置??(代码在本地工作-在WordPress之外)。
最合适的回答,由SO网友:Geert 整理而成
确保在要设置cookie的点上尚未发送HTTP标头。以下是您可以测试的方法:
function set_cookie() {
var_dump(headers_sent()); // should be bool(false)
...
转向
WP_DEBUG
在配置中打开。php文件在调试时也可能有帮助。
顺便说一下,你真的应该在$_GET[\'id\']
. 此变量可以包含任何内容。将其转换为(正)整数应该有很大的帮助:
$referrerID = absint($_GET[\'id\']); // Note: absint() is a WP function
SO网友:Joe
另一种选择是使用PHP的ob_start();
和ob_end_flush();
.
You can find documentation on the two functions here
我解决问题的方法是在打开和关闭html标记之前和之后调用这两个函数,如下所示:
<?php ob_start(); ?>
<!DOCTYPE html>
<html>
<head>
</head>
<body>
<?php /* Wordpress loop and other tempate code here */ ?>
</body>
</html>
<?php ob_end_flush(); ?>
我遇到的问题是调用一个使用PHP
setcookie();
由于WordPress会逐步处理页面,因此无法创建cookie,因为页面的标题已被发送。
PHP的输出缓冲函数强制在WordPress处理页面之前发送标题。
希望这有帮助。