Php 在WordPress站点中创建Cookie时出现问题

Php 在WordPress站点中创建Cookie时出现问题,php,wordpress,cookies,Php,Wordpress,Cookies,我试图在WordPress站点中创建一些功能,当用户访问存储他们访问过的位置页面所在城市的位置页面时,这些功能将创建cookie。然而,我从WordPress得到一个错误,我不能修改标题信息。我在functions.php文件中包含了以下函数: function set_city_cookie($city) { if(!isset($_COOKIE['city_cookie'])) { // set a cookie setcookie('city_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); 

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

Cookies在HTTP响应头中发送。由于HTML内容已经启动,您无法返回到标题并添加cookie。这就是为什么会出现这样的错误:

发件人:

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

你应该调用你的
set\u city\u cookie($city)在任何HTML输出之前:

<?php

set_city_cookie($city); 
...

?>
<!DOCTYPE html>


这是有道理的,当我调用
html
上方区域中的函数时,我不再得到任何错误。然而,我的函数似乎仍然没有实际设置任何cookies。当我设置一个变量时,
var\u dump
等我只得到
NULL
您是否尝试
print\r($\u COOKIE)?我刚试过,得到一个像这样的数组,上面有一堆数字/字母,其中点是:
[has_js]=>1[wordpress_logged_….]=>..[wp-settings-1]=>..[wp-settings-time-1]=>..
我猜这只是wp cookie。我没有看到我的
city\u cookie
在页面加载时设置了$\u cookie,这是由于web的无状态特性。在重新加载页面时可以访问它。如果希望立即访问,则必须使用$city变量。