我正在尝试在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);
有人对为什么这样不起作用有任何想法吗?
答案 0 :(得分:1)
在HTTP响应标头中发送cookie。由于HTML内容已经启动,因此您无法返回到标题并添加cookie。这就是为什么您遇到类似How to fix “Headers already sent” error in PHP
的错误的原因setcookie()定义要与其他HTTP标头一起发送的cookie。与其他标头一样,必须在脚本的任何输出之前 发送cookie(这是协议限制)。这就要求您在所有输出(包括
<html>
和<head>
标签以及任何空白)之前都先调用此函数。
您应该在任何HTML输出之前调用set_city_cookie($city);
:
<?php
set_city_cookie($city);
...
?>
<!DOCTYPE html>