在特定页面中设置后,将在wordpress中设置Cookie

时间:2013-11-02 21:26:15

标签: php wordpress cookies

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

(编辑)我只需要在特定页面设置此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');

1 个答案:

答案 0 :(得分:1)

如果cookie在那里,但它是空的,我建议检查json_encode()是否正常工作。只要遇到某些不喜欢的字符,它就会返回null。一个很好的检查方法是json_last_error(),你必须在json_encode()后调用它。

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

  1. 我可以使用简单的常量字符串
  2. 设置cookie
  3. 我的$searchObject包含我想要的内容
  4. json_encode()是否正确生成json数据
  5. 在我的回答中,我认为前两个是好的。