我在WordPress安装中设置cookie时遇到了一些麻烦。
这是我的代码:
function write_cookies() {
setcookie("category", get_query_var('cat'), time() + 3600 * 24, COOKIEPATH, '', false);
print($_COOKIE["category"]);
}
add_action('init', 'write_cookies');
理论上,这应该输出categoryId
,但似乎没有任何效果。
我在localhost上读到了这一点,因为cookie域工作时提供了一个空字符串,但我无法获得任何类型的输出。我还尝试了'localhost'
,'.localhost'
,'127.0.0.1'
,false
和NULL
作为域名。 COOKIEPATH
常量当前输出'/'
我正在通过Chrome阅读Cookie,并且页面上的Cookie似乎没有任何变化。
更新
到目前为止,感谢您的答案,我将解释为什么在这种情况下我需要cookie ...
基本上,在我的帖子页面上,我希望显示同一类别中的其他帖子。对于具有多个类别的人来说,这意味着存储用户到达帖子的路线。我将给出一个真实世界的例子:
用户将从首页导航至行业新闻,发布题为“制造业新资金重新激励当地政治家”的文章。现在,在本节的其他帖子中,我想展示行业新闻的帖子,但由于有关的特定帖子是在行业新闻和政治新闻下设置的,我如何判断采取了哪条路线?
在第一个实例中,这被设置为分析wp_get_referer()以确定在帖子之前出现的类别。但是,如果我然后使用此其他帖子部分转到一个名为“制造业新区域发展”的帖子,该帖子被归类为行业新闻和区域新闻,则wp_get_referer会返回上一篇文章,而不是我逻辑中所需的类别
我的解决方案是(在访问类别页面时)存储类别的ID,并在将来的所有逻辑中使用它来确定要在“其他帖子”部分中显示的正确类别。
令人困惑,我知道,但我在设计和客户需求方面都受限于提供这一特定流程。
根据建议,我已更新我的代码以显示:
function write_cookies() {
setcookie("category", get_query_var('cat'), false, '/', str_replace('http://www','',get_bloginfo('url')));
print('test: '.$_COOKIE["category"]);
}
add_action('init', 'write_cookies');
这会在没有打印cookie的情况下输出test:
。
答案 0 :(得分:1)
我会让wordpress使用类似str_replace('http://www','',get_bloginfo('url'))
之类的东西为我找出合适的域名。那就是wordpress默认类别是不够的。
一般来说,使用Wordpress默认类别和标记结构远比原始cookie更好。那又为什么你需要一个cookie?
答案 1 :(得分:1)
Chrome有一个已知的限制
http://code.google.com/p/chromium/issues/detail?id=56211
您无法设置/访问http://localhost Cookie。 Chrome中的奇怪问题。
答案 2 :(得分:0)
我在非WordPress安装上测试了各种Cookie域,我发现在localhost环境中,唯一成功设置变量的域是''
,即空字符串。
现在是我的代码:
function write_cookies() {
setcookie("category", get_query_var('cat'), false, '/', '',false);
}
我也调整了它,因此它是在post循环中调用的,而不是来自'init'事件,这使我可以访问相当多的变量来设置到cookie而不是init事件。