如何在 Wordpress 中设置 cookie
Posted
技术标签:
【中文标题】如何在 Wordpress 中设置 cookie【英文标题】:How to set a cookie in Wordpress 【发布时间】:2012-08-01 01:36:58 【问题描述】:我正在尝试在 wordpress 中设置一个 cookie。我的 cookie 设置如下:
<?php setcookie('test', 'test', 0, '/', '/'); ?>
在我的主题的 header.php 中,但是当我转到浏览器查看我的网站时出现此错误
Warning: Cannot modify header information - headers already sent by (output started at /home/content/19/9468119/html/wp-content/themes/twentyeleven/header.php:27) in /home/content/19/9468119/html/wp-content/themes/twentyeleven/header.php on line 201
而且我的 cookie 也没有设置。如何在 wordpress 中设置 cookie?
我也试过了
function set_new_cookie()
setcookie('test', 'test', 0, '/', '/');
add_action( 'init', 'set_new_cookie');
【问题讨论】:
在 WordPress 中,您应该使用COOKIEPATH
和 COOKIE_DOMAIN
,否则您可能会遇到 cookie 无法正常工作的问题(请参阅 this answer)
【参考方案1】:
你必须在输出任何东西之前设置它们
看那里:How can I set, get and destroy cookies in Wordpress?
如果您在 function.php 中使用主题
function set_new_cookie()
//setting your cookies there
add_action( 'init', 'set_new_cookie');
您的到期日期为 0,因此您的 cookie 将立即被删除,请查看 php 文档:
编辑: 来自 php.net:
如果设置为 0 或省略,cookie 将在结束时过期 会话(当浏览器关闭时)。
http://php.net/manual/en/function.setcookie.php
例如,您必须像这样设置它:
setcookie("TestCookie", $value, time()+3600); /* expire in 1 hour */
【讨论】:
建议的内容不起作用,我尝试放入我的 function.php 页面,但它给了我关于语法的 php 错误 这是正确的语法,这里有更多示例:wptheming.com/2011/04/set-a-cookie-in-wordpress 你有什么错误? 我也尝试了您的代码 Jerome,但它没有创建我的 cookie...我需要在某个地方调用它吗?以及如何? 你需要在你使用的主题链接的function.php文件中设置 虽然这个答案可能对 OP 有所帮助,但它并不是最好的答案。在 WP 中,你应该使用COOKIEPATH
和 COOKIE_DOMAIN
,否则你会遇到 cookie 正常工作的问题(参见 this answer)【参考方案2】:
设置 Cookie: 下面的示例将设置过期 一小时(60*60 秒) 的 cookie,因为它使用 COOKIEPATH 设置并且 COOKIE_DOMAIN 是由 WordPress 定义的根据您的站点路径和域。
setcookie( 'my-cookie-name', 'my-cookie-value', time() + 3600, COOKIEPATH, COOKIE_DOMAIN );
获取 Cookie: 可以通过使用包含关联数组的变量 $_COOKIE 来获取 cookie。
$myCookie = isset( $_COOKIE['my-cookie-name'] ) ? $_COOKIE['my-cookie-name'] : 'Not Set!!';
Delete or Unset a Cookie: 和上面的指令#1一样,只是cookie的过期时间为负数;
setcookie( 'my-cookie-name', '', time() - 3600, COOKIEPATH, COOKIE_DOMAIN );
【讨论】:
我更喜欢使用 WordPress 常量以秒为单位,例如 MONTH_IN_SECONDS,而不是输入整数。以上是关于如何在 Wordpress 中设置 cookie的主要内容,如果未能解决你的问题,请参考以下文章
PHP 如何在WordPress中设置自己的默认Gravatar