在wordpress中需要正确的setcookie方式

时间:2012-09-12 17:24:58

标签: wordpress cookies setcookie

我一直在寻找一整天如何在wordpress中设置好。以我的方式,我发现(使用开发人员工具栏)cookie已设置但仍然无法正常工作。 我有2个文件,第一个包含重定向到另一个页面的登录表单来设置cookie并返回到另一个页面以检查它是否正常工作。测试的域名是这样的:blog.mydomain.com。这是setcookie文件:

<?php
setcookie("user_name","test",time()+3600);
?>

并像这样捏饼干:

if(isset($_COOKIE["user_name"])){
echo "cookie exists";
}
else{
echo "cookie doesn't exist";
}

我已经阅读了很多关于这个问题的主题,但没有明确的答案。 提前致谢

3 个答案:

答案 0 :(得分:3)

当您尝试在将输出发送到浏览器后设置cookie时,通常会发生这种情况。要在WP中设置cookie,您应该使用'init'钩子在init上设置cookie。

function set_username_cookie() {
    if (!isset($_COOKIE['user_name'])) {
        setcookie("user_name","test",time()+3600);
    }
}
add_action( 'init', 'set_username_cookie');

答案 1 :(得分:1)

另一个选择是使用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。 s标头已经发送。

PHP的输出缓冲功能强制在WordPress处理页面之前发送标题。

希望这有帮助。

答案 2 :(得分:1)

好吧,我在wordpress中使用cookie的最好方法就是这个,

function set_my_cookie() {
global $post;
$post_id  = $post->ID;  
$cookie_name = "my_cookie";
$cookie_value = "my_cookie_val";
if (!isset($_COOKIE['my_cookie'])) {
{
    setcookie($cookie_name, $cookie_value, time() + (86400 * 30), "/"); 
}}add_action( 'wp', 'set_my_cookie');

我在wordpress的wp钩子中使用了这个函数来setcookie。这个的主要原因是我们可能需要一些当前页面或帖子,我们无法在init钩子上访问,但我们可以在wp钩子中访问。

现在,在短代码或其他插件/主题功能中,我们可能只需要检查cookie是否存在。多数民众赞成