在Wordpress中设置自定义Cookie


13

我正在尝试设置Cookie,以将返回的用户重新路由到我在Wordpress网站中的特定页面。

我想对这2件事情提出一些建议:

  1. 在加载任何内容以处理重定向之前,应在Wordpress php文件的何处检查cookie?是否有一个良好的文件应该存在于其他文件中?
  2. 如何在Wordpress中正确设置Cookie?setcookie('cookie_name', 'cookie_value', time()+4000);似乎没有在我的系统中保存任何cookie。

啊,意识到我需要将其挂接到init()中。解决方案:我在functions.php中创建了一个函数,该函数将设置并检查cookie。为了使它正常工作,在定义函数之后,在函数外部调用以下代码:add_action('init','function-name');

4
您可以回答自己的问题...
40XUserNotFound 2011年

2
实际上,它是明确鼓励的。请自己回答。我也将其发送到WordPress.SE,因为它在那里似乎更合适。

谢谢大家-我没有意识到这里有一个Wordpress区域。并感谢您回答自己的提示:) APpreciated,+ 1秒。
Atticus

Answers:


17

1-您可以检查cookie并使用在任何输出(如“ init”钩子之前)被调用的钩子进行重定向:

<?php

// Hook the function "redirect()" on to the "init" action
add_action('init', 'redirect');

// redirect() may redirect the user depending on the cookies he has
function redirect(){
  /* CODE */
}

?>

2-设置cookie的最佳方法是使用“ init”钩子,如下所示:

<?php

add_action('init', 'my_setcookie');

// my_setcookie() set the cookie on the domain and directory WP is installed on
function my_setcookie(){
  $path = parse_url(get_option('siteurl'), PHP_URL_PATH);
  $host = parse_url(get_option('siteurl'), PHP_URL_HOST);
  $expiry = strtotime('+1 month');
  setcookie('my_cookie_name_1', 'my_cookie_value_1', $expiry, $path, $host);
  /* more cookies */
  setcookie('my_cookie_name_2', 'my_cookie_value_2', $expiry, $path, $host);
}

?>

这更加一致,如果您在www.example.com/blog上拥有博客,则该coockie将在以下位置不可用

  • www.example.com
  • www.example.com/store
  • example.com
  • www2.example.com
  • ...

更新资料

您还应该能够使用COOKIE_PATH和COOKIEDOMAIN常量,而不用自己弄清楚它们,我刚刚在Andre R Kohl的答案中注意到了这一点– drzaus


您如何放置多个变量,例如Firstname,LastName,Random1,Random2,而不仅仅是“ my_cookie_1”变量。
Damainman

1
只需添加更多setcookie()
Nabil Kadimi

哦,我不知道Cookie只能为每个Cookie保留一个变量。有没有一种方法可以设置多个cookie,而无需上面的时间和url代码,从而减少代码数量?将它们放入变量中吗?
Damainman

您还应该能够使用COOKIEPATHCOOKIEDOMAIN常量,而不是自己弄清楚它们,我刚刚在Andre R Kohl的答案中
drzaus 2015年

更正: COOKIE_DOMAIN
drzaus

11

您可能应该使用自WP 3.0起存在的常量COOIKEPATHCOOKIE_DOMAIN

setcookie("your_cookie", $your_value, time()+3600, COOKIEPATH, COOKIE_DOMAIN);

7

啊,意识到我需要将其挂接到init()

解决方案:我在functions.php中创建了一个函数,该函数将设置并检查cookie。为了使它正常工作,在定义函数之后,在函数外部调用以下代码:

add_action('init', 'function-name'); 

1

这种方式有效:

    add_action( 'init', 'function-to-setcookie' ); 

    function function-to-setcookie(){

        //use condition here , in which page you eant to set cookie
        //choose a page where you want the cookie to be set
        $pageurl = get_option('siteurl').'/set-cookie-page'; 

       // use a function to get current page url and use condition 
       //to match it with the desired page where you want to set cookie 
       if ( $pageurl === current_page_url() ) {
           setcookie( 'cookie_name', 'cookie_value', $expiryTime, $cookiepath, $siteurl );
         }

    }

请修正您的代码格式。
耶夫斯卡

另外,关于源的少量内容确实很有帮助。
bueltge '16
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.