【问题标题】:How can I set, get and destroy cookies in WordPress?如何在 WordPress 中设置、获取和销毁 cookie?
【发布时间】:2011-09-05 04:55:34
【问题描述】:

如何在 WordPress 中设置、获取和销毁 cookie?

我在网上冲浪,但我无法获得明确的想法,请帮助我找到方法。

【问题讨论】:

标签: php wordpress cookies


【解决方案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 以某种形式存在。但要明确一点,评论的目的不是为了挑战你的答案,更多的是为了完成它以备将来参考。 :-)
      猜你喜欢
      • 1970-01-01
      • 2018-12-21
      • 2017-12-25
      • 1970-01-01
      • 2012-08-01
      • 2016-03-15
      • 1970-01-01
      • 2015-03-14
      • 1970-01-01
      相关资源
      最近更新 更多