2

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

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

并像这样检查cookie:

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

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

4

3 回答 3

4

当您在将输出发送到浏览器后尝试设置 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');
于 2012-10-02T21:36:27.273 回答
2

好吧,我在 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 钩子中设置cookie。主要原因是我们可能需要某个当前页面或帖子,我们无法在 init 挂钩上访问,但我们可以在 wp 挂钩中访问。

现在,在简码或其他插件/主题功能中,我们可能只需要检查 cookie 是否存在。而已

于 2017-08-11T11:20:42.513 回答
1

另一种选择是使用 PHPob_start();ob_end_flush();.

您可以在此处找到有关这两个功能的文档

我解决问题的方法是在打开和关闭 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 处理页面之前发送标头。

希望这可以帮助。

于 2015-10-29T21:42:52.837 回答