Php wordpress中的Cookie集在特定页面中设置后将被删除

Php wordpress中的Cookie集在特定页面中设置后将被删除,php,wordpress,cookies,Php,Wordpress,Cookies,我试图使用functions.php中的钩子在wordpress中设置cookie,但是cookie值为空。如何设置从URL获取值的cookie($\u GET) (编辑)我只需要在特定页面设置此cookie,因此我将其包装在if语句中。cookie现在已正确设置。但是当我移动到另一个页面并尝试获取cookie时,它不再设置!你知道为什么会这样吗 (编辑2)我通过将cookie路径设置为“/”解决了这个问题 函数集_cookie(){ 如果(是第页(“酒店”)){ $destinationTyp

我试图使用functions.php中的钩子在wordpress中设置cookie,但是cookie值为空。如何设置从URL获取值的cookie($\u GET)

(编辑)我只需要在特定页面设置此cookie,因此我将其包装在if语句中。cookie现在已正确设置。但是当我移动到另一个页面并尝试获取cookie时,它不再设置!你知道为什么会这样吗

(编辑2)我通过将cookie路径设置为“/”解决了这个问题

函数集_cookie(){
如果(是第页(“酒店”)){
$destinationType='city';//'city';
$destinationCode=$_GET[“dcode”];/“lon”;
$checkinDate=$_GET[“date_in”];//date('2013-08-05');//'2006-05-10';
$checkoutDate=$\u GET[“date\u out”];
$date1=strotime($checkinDate);
$date2=strottime($checkoutDate);
$datediff=$date2-$date1;
$duration=floor($datediff/(60*60*24));
//创建搜索对象
$search=array();
$search[0]=$destinationType;
$search[1]=$destinationCode;
$search[2]=$checkinDate;
$search[3]=$checkoutDate;
$search[4]=$duration;
//创建房间对象
$packages=array();
$npack=intval($_GET['numpack']);
对于($j=0;$j<$npack;$j++){
$packages[$j][0]=$\u GET['rtype'。($j+1)];
$packages[$j][1]=1;//$_GET['nroom'($j+1)];
$packages[$j][2]=$_GET['cot'($j+1)];
如果($packages[$j][2]==null){
$packages[$j][2]=“0”;
}
对于($k=0;$k
如果cookie在那里,但它是空的,我建议检查
json\u encode()
是否起作用。每当遇到不喜欢的字符时,它返回
null
。检查的一个好方法是,必须在
json\u encode()之后的某个地方调用它

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

  • 我可以用一个简单的常量字符串设置cookie吗
  • 我的
    $searchObject
    是否包含我想要的内容
  • json\u encode()
    是否正确生成json数据

  • 在我的回答中,我假设前两个是可以的。

    如果cookie在那里,但它是空的,我建议检查
    json\u encode()
    是否起作用。每当遇到不喜欢的字符时,它返回
    null
    。检查的一个好方法是,必须在
    json\u encode()之后的某个地方调用它

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

  • 我可以用一个简单的常量字符串设置cookie吗
  • 我的
    $searchObject
    是否包含我想要的内容
  • json\u encode()
    是否正确生成json数据

  • 在我的回答中,我假设前两个都可以。

    当我在php文件上直接使用此代码时,cookie是正确创建的,问题是我无法在页面模板上执行此操作,因为如果我在
    get_header()上方生成cookie
    在style.css不破坏的情况下加载网站功能。这就是为什么要将其添加到get_标题挂钩中。但是你可以测试,如果你的函数真的被调用了,如果它被调用了,那么它应该可以工作。我现在可以设置cookie,但是我只需要在某个页面上设置这个cookie,所以我在我的函数中使用if
    if(is_page('hotel')){//set cookies}
    ,并且cookie设置正确。但是当我移动到另一个页面时,cookie被删除了!知道为什么会发生这种情况吗?我已将cookie路径设置为“/”,感谢您的帮助。我假设您已将cookie(默认情况下)设置为实际路径,如果在转到其他页面时更改了路径,则该路径不可用。很高兴你成功了!当我在php文件上直接使用此代码时,cookie是正确创建的,问题是我无法在页面模板上执行此操作,因为如果我在
    get\u header()
    函数上方生成cookie,则站点将在加载时不会被style.css破坏。这就是为什么要将其添加到get\u header钩子中。但是你可以测试,如果你的函数真的被调用了,如果它被调用了,那么它应该可以工作。我现在可以设置cookie,但是我只需要在某个页面上设置这个cookie,所以我在我的函数中使用if
    if(is_page('hotel')){//set cookies}
    ,并且cookie设置正确。但是当我移动到另一个页面时,cookie被删除了!知道为什么会发生这种情况吗?我已将cookie路径设置为“/”,感谢您的帮助。我假设您已将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');