如何在 WordPress 中设置、获取和销毁 cookie?
Posted
技术标签:
【中文标题】如何在 WordPress 中设置、获取和销毁 cookie?【英文标题】:How can I set, get and destroy cookies in WordPress? 【发布时间】:2011-09-05 04:55:34 【问题描述】:我在网上冲浪,但我无法获得明确的想法,请帮助我找到方法。
【问题讨论】:
对不起,正如评论中提到的那样,以下内容对您不利:codex.wordpress.org/Function_Reference/wp_setcookie 请使用 Phil 建议的内容。祝你好运! 所做的只是设置基于用户 ID 的身份验证 cookie。见codex.wordpress.org/Function_Reference/wp_set_auth_cookie @Phil,感谢您指出:P 小心,大多数文章都做错了,或者至少不是 WordPress 的方式。请务必使用 WordPress 提供的预烘焙 cookie 常量,查看本文以了解有关如何正确设置、获取和删除 cookie 的更多信息benmarshall.me/setting-cookies-in-wordpress 【参考方案1】:在function.php
中试试这段代码,在 WordPress 中使用 Cookies
在 WordPress 中设置 Cookie
add_action( 'init', 'my_setcookie' );
function my_setcookie()
setcookie( 'my-name', 'my-value', time() + 3600, COOKIEPATH, COOKIE_DOMAIN );
在 WordPress 中获取 Cookie
add_action( 'wp_head', 'my_getcookie' );
function my_getcookie()
$alert = isset( $_COOKIE['my-name'] ) ? $_COOKIE['my-name'] : 'not set';
echo "<script type='text/javascript'>alert('$alert')</script>";
在 WordPress 中删除或取消设置 Cookie
add_action( 'init', 'my_deletecookie' );
function my_deletecookie()
setcookie( 'my-name', '', time() - 3600, COOKIEPATH, COOKIE_DOMAIN );
【讨论】:
【参考方案2】:要在 wordpress 上设置 cookie,我使用了 $domain 值。有了它,我可以在整个站点中使用 cookie 值。
$domain = ($_SERVER['HTTP_HOST'] != 'localhost') ? $_SERVER['HTTP_HOST'] : false;
setcookie("cookie_name", 'cookie_value', 0, '/', $domain);
取消设置
setcookie("cookie_name", '', time()-1000, '/');
【讨论】:
【参考方案3】:您可以使用 PHP 在服务器端检索和操作 cookie,也可以使用 JavaScript 在客户端检索和操作 cookie。
在 PHP 中,您使用 setcookie()
设置 cookie。请注意,这必须在任何输出发送到浏览器之前完成,这在 Wordpress 中可能是一个很大的挑战。您几乎受限于一些可以通过插件或主题文件(例如functions.php
)设置的早期运行挂钩,例如
add_action('init', function()
if (!isset($_COOKIE['my_cookie']))
setcookie('my_cookie', 'some default value', strtotime('+1 day'));
);
在 PHP 中检索 cookie 要容易得多。只需从$_COOKIE
超级全局中按名称获取它们,例如
$cookieValue = $_COOKIE['my_cookie'];
取消设置 cookie 需要设置一个过去的过期日期,例如
setcookie('my_cookie', null, strtotime('-1 day'));
对于 JavaScript,我建议查看其中一个 jQuery cookie 插件(因为 jQuery 已经是 Wordpress 的一部分)。试试http://plugins.jquery.com/project/Cookie
【讨论】:
另外 - 确保为 cookie 设置正确的域。将来您可能希望有一个主域和一个子域都访问相同的 cookie。如果您现在设置 Cookie,则无需担心以后会重置它们。 在 wordpress 中设置 cookie 时,我会使用一些为其设置的常量: setcookie( 'my_cookie', 'some default value', strtotime('+1 day'), COOKIEPATH , COOKIE_DOMAIN, 假);如果没有路径和域,您将逐页设置 cookie,而不是为站点设置。 虽然 cookie 最好用早期的 hook 设置,或者像你所说的quite the challenge in Wordpress
,但总是可以选择稍后用AJAX
响应设置它。
@ObmerkKronen 早在 2011 年我写这个答案时,我认为 Wordpress 没有 AJAX
响应选项:)
据我所知,wordpress 中的 ajax 选项至少从 2008 (当我开始使用它时)开始就存在,并且肯定从 version 2.8 以某种形式存在。但要明确一点,评论的目的不是为了挑战你的答案,更多的是为了完成它以备将来参考。 :-)以上是关于如何在 WordPress 中设置、获取和销毁 cookie?的主要内容,如果未能解决你的问题,请参考以下文章
PHP 如何在WordPress中设置自己的默认Gravatar
如何使用 wp_insert_post 在 wordpress 中设置 POST 永久链接/slug