我在我的Wordpress网站中遇到了setcookie()的正确位置,我终于将它放在header.php
的第一行。但我需要它来构建cookie,其中的值来自特定页面的url,而不是主页。所以,header.php
的第一行是:
<?php setcookie( 'mycookie', $_GET["var1"]."/".$_GET["var2"]."/".$_GET["var3"], strtotime( '+5 years' ), COOKIEPATH, COOKIE_DOMAIN, false, false);?>
我期待当我转到http://www.example.com/?var1=01&var2=02&var3=03
时,cookie将被设置为具有值“01/02/03”但它只接收与任何其他页面中相同的值,“//” ,就像它没有看到$_GET[]
获得的变量。
我对如何使这项工作有任何想法?
答案 0 :(得分:2)
使用您的代码进行一些测试后,我对其进行了一些更改,以便更轻松地进行调试。
我注意到你写了“COOKIEPATH,COOKIE_DOMAIN”作为参数,我不知道你是否正在使用它,但尝试用“/”和“.example.com”替换它们以使cookie可供你使用整个领域或必要时限制。
这使它在运行PHP 5.3.x的服务器上运行。
请注意,cookie是在第一次运行页面时创建的,但仅在第二次加载页面时才可用。
首次加载页面时,您会看到类似的内容:
Cookie已保存
1
01
02
03
Cookie mycookie不存在......但是
第二次应该是这样的:
Cookie已保存
1
01
02
03
01/02/03
希望我能提供帮助。
<?php
$cookieName = "mycookie";
$cookieIsSaved = setcookie( $cookieName,
$_GET["var1"]."/".$_GET["var2"]."/".$_GET["var3"],
strtotime( "+5 years" ),
"/",
".example.com",
false,
false);
if ($cookieIsSaved) {
echo "Cookie was Saved<br/>";
}
else
{
echo "Cookie was not Saved<br/>";
}
echo $cookieIsSaved."<br/>";
echo($_GET["var1"]."<br/>");
echo($_GET["var2"]."<br/>");
echo($_GET["var3"]."<br/>");
if (isset($_COOKIE[$cookieName])) {
print_r($_COOKIE[$cookieName])."<br/>";
}
else
{
echo "Cookie $cookieName does not exist... yet";
}
?>
答案 1 :(得分:1)
我猜你应该使用$ wp_query对象的query_vars []子数组:
global $wp_query;
if (isset($wp_query->query_vars['var1'])) {
// modify the where/join/groupby similar to above examples
}
或只是get_query_var()函数。