如何在 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?的主要内容,如果未能解决你的问题,请参考以下文章

CSS 如何:在WordPress 2.7中设置作者评论

PHP 如何在WordPress中设置自己的默认Gravatar

如何:在wordpress2.7中设置作者评论的样式

如何使用 wp_insert_post 在 wordpress 中设置 POST 永久链接/slug

在子目录中设置 CakePHP; Wordpress 安装在根目录下

如何在WordPress中设置自己的默认Gravatar