首页 > 解决方案 > 在 WordPress 网站中创建 cookie 的问题

问题描述

我正在尝试在 WordPress 网站中创建一些功能,当用户访问存储他们访问过的位置页面所在城市的位置页面时,它将创建一个 cookie。但是,我从 WordPress 收到一个错误,我无法修改标题信息。我在我的functions.php文件中包含了以下函数:

function set_city_cookie($city) { 

    if(!isset($_COOKIE['city_cookie'])) {

    // set a cookie 
    setcookie('city_cookie', $city, time()+30);
     $last_city=$_COOKIE['city_cookie'];
        return $last_city;
    }

    } 
    add_action('init', 'set_city_cookie');

然后我single-locations.php像这样调用函数:

set_city_cookie($city); 

有没有人知道为什么这不起作用?

标签: phpwordpresscookies

解决方案


Cookie 在 HTTP 响应标头中发送。由于 HTML 内容已经开始,您无法返回到标题并添加 cookie。这就是为什么你会遇到这样的错误:如何修复 PHP 中的“标头已发送”错误

来自http://php.net/setcookie

setcookie()定义了一个 cookie 与其余的 HTTP 标头一起发送。与其他标头一样,必须在脚本的任何输出之前发送 cookie (这是协议限制)。这要求您在任何输出之前调用此函数,包括<html><head>标记以及任何空格。

你应该set_city_cookie($city);在任何 HTML 输出之前调用你的:

<?php

set_city_cookie($city); 
...

?>
<!DOCTYPE html>

推荐阅读