我在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:
。
我会让wordpress用str_replace('http://www','',get_bloginfo('url'))
之类的东西为我找出合适的域。如果wordpress默认类别还不够的话。
一般来说,使用Wordpress默认的类别和标记结构比原始cookie要好得多。那你为什么还需要一块饼干呢?
Chrome 存在已知的限制
http://code.google.com/p/chromium/issues/detail?id=56211
您无法设置/访问http://localhost饼干。Chrome中的奇怪问题。
我在非WordPress安装上测试了各种Cookie域,发现在localhost环境中,唯一成功设置变量的域是''
,即空字符串。
这是我现在的代码:
function write_cookies() {
setcookie("category", get_query_var('cat'), false, '/', '',false);
}
我还对它进行了调整,使其从post循环中调用,而不是从"init"事件中调用,这使我可以访问比init事件更多的变量来设置到cookie中。