【问题标题】:Cookie set in wordpress is being deleted after being set in specific page在wordpress中设置的cookie在特定页面设置后被删除
【发布时间】:2013-11-04 02:14:42
【问题描述】:

我正在尝试使用functions.php 中的挂钩在wordpress 中设置cookie,但cookie 值显示为空。如何设置从 URL ($_GET) 获取值的 cookie?

(编辑)我只需要在特定页面上设置这个 cookie,所以我将它包装在 if 语句中。 cookie 现在设置正确。但是当我移动到另一个页面并尝试获取 cookie 时,它​​不再设置了!任何想法为什么会发生这种情况?

(编辑 2)我通过将 cookie 路径设置为“/”来解决此问题。

function set_cookie(){
if(is_page('hotel')){
  $destinationType = 'city'; //'city';
  $destinationCode = $_GET["dcode"]; //'lon';
  $checkinDate = $_GET["date_in"]; //date('2013-08-05'); // '2006-05-10';
  $checkoutDate = $_GET["date_out"];
  $date1 = strtotime($checkinDate);
  $date2 = strtotime($checkoutDate);
  $datediff = $date2 - $date1;
  $duration = floor($datediff / (60 * 60 * 24));

  //Create Search Object
  $search = array();
  $search[0] = $destinationType;
  $search[1] = $destinationCode;
  $search[2] = $checkinDate;
  $search[3] = $checkoutDate;
  $search[4] = $duration;
  //Create Rooms Object
  $packages = array();
  $npack = intval($_GET['numpack']);
  for ($j = 0; $j < $npack; $j++) {
      $packages[$j][0] = $_GET['rtype' . ($j + 1)];
      $packages[$j][1] = 1; //$_GET['nroom' . ($j + 1)];
      $packages[$j][2] = $_GET['cot' . ($j + 1)];
      if ($packages[$j][2] == null) {
          $packages[$j][2] = '0';
      }
      for ($k = 0; $k < intval($_GET['children' . ($j + 1)]); $k++) {
          $packages[$j][3][$k] = $_GET['achild' . ($j + 1) . '_' . ($k + 1)];
      }
  }

  //Complete Search Object to cookie
  $searchObject = array($search, $packages);
  setcookie('searchobject', json_encode($searchObject), time() + 3600, "/");
  }

  }

add_action('get_header', 'set_cookie');

【问题讨论】:

    标签: php wordpress cookies


    【解决方案1】:

    如果 cookie 存在,但它是空的,我建议检查 json_encode() 是否有效。每当遇到某个不喜欢的角色时,它都会返回null。一个很好的检查方法是json_last_error(),你必须在json_encode()之后的某个地方调用它。

    您可以对您的问题进行全面的逐步检查:

    1. 我可以用简单的常量字符串设置cookie吗
    2. 我的$searchObject 是否包含我想要的内容
    3. json_encode() 是否正确生成 json 数据

    在我的回答中,我假设前两个没问题。

    【讨论】:

    • 当我直接在 php 文件上使用此代码时,cookie 被正确创建,问题是我无法在页面模板上执行此操作,因为如果我在 get_header() 函数上方生成 cookie 站点加载时 style.css 不会破坏它。
    • 这就是您将它添加到 get_header 挂钩的原因。但是你可以测试一下,如果你的函数真的被调用了,如果是,那么它应该可以工作。
    • 我现在可以设置cookie,但我只需要在某个页面上设置这个cookie,所以我在我的函数if(is_page('hotel')){//Set cookies}中使用了if,并且cookie设置正确。但是当我移动到另一个页面时,cookie 被删除了!知道为什么会发生这种情况吗?
    • 我已修复此设置,将 cookie 路径设置为“/”,感谢您的帮助。
    • 我假设您将 cookie(默认情况下)设置为实际路径,如果您在转到另一个页面时更改了路径,则它不可用。很高兴你成功了!
    猜你喜欢
    • 2012-11-06
    • 2012-05-24
    • 2016-03-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-12-05
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多