在WordPress中设置重定向Cookie

时间:2013-04-26 作者:Sammie

我整天都在网上搜索我的问题的解决方案,但我看不到任何东西,因为我对编码一无所知。

我想做什么:

  1. 当有人访问我网站上的某个特定页面时,我想设置一个cookie,我们称之为第1页

到目前为止,我已经成功地在Wordpress函数中设置了cookie。php,通过插入以下内容:

function set_newuser_cookie() {
    if (!isset($_COOKIE[\'subscriber\'])) {
        setcookie(\'subscriber\', no, 0, COOKIEPATH, COOKIE_DOMAIN, false);
    }
}
add_action( \'init\', \'set_newuser_cookie\');
我通过在函数中插入以下内容来定义重定向。php:

if (!isset ($_COOKIE[\'subscriber\']))
header ("Location: page2");
else
header ("Location: page3");
这就是我所能做到的。这不起作用,因为以上两项都不是特定于页面的。我只希望在访问者访问一个特定页面时设置cookie(或更改变量),然后在访问者访问另一个特定页面时重定向cookie。

这可行吗?

哦,顺便说一句,我在一个自我托管的Wordpress网站上。

非常感谢。

萨米

3 个回复
SO网友:s1lv3r

因此,代码中唯一缺少的部分就是检查当前所在的页面。is\\u page()函数是获取此上下文的好方法。

你可以这样尝试(我没有测试它,只是从脑海中写出来展示这个概念):

function set_newuser_cookie() {
    if (!isset($_COOKIE[\'subscriber\']) && is_page(\'my-page-slug-page1\')) {
        setcookie(\'subscriber\', no, 0, COOKIEPATH, COOKIE_DOMAIN, false);
    }
}
add_action( \'init\', \'set_newuser_cookie\');

function my_cookie_redirect() {
   if (isset($_COOKIE[\'subscriber\']) && is_page(\'my-page-slug-page2\')) {
      wp_redirect(\'/page3\');
      exit;
   }
}
add_action(\'template_redirect\', \'my_cookie_redirect\', 1);
wordpress is\\u page()函数将页面id、页面slug或page\\u title作为参数。http://codex.wordpress.org/Function_Reference/is_page

您还应该始终在重定向后退出,因为否则用户将在重定向到第3页之前首先加载第2页

SO网友:Sammie

是的,是的,哈哈,达姆!你没有完全得到我想要的,这是我的错,因为我没有能够正确地解释它。我不想让访问者在任何时候被重定向到主页。

以下是我的意见:(2013年4月27日编辑)

不过我还是有问题。

问题是,它在我的mac电脑(chrome、safari和firefox)上可以完美地工作,但在我的电脑上却不能。在电脑上,它可以很好地设置cookie,但无论cookie是否设置,都会发生重定向。

新编辑:现在开始工作!谢谢大家。下面的代码可以完美地工作。

function set_newuser_cookie() {
   global $post;
   if (!isset($post->ID)) return;

 if ($post->ID == 1 || $post->ID == 7 || $post->ID == 8 || $post->ID == 9) 

 {
     if (!isset($_COOKIE[\'subscriber\'])) {
        setcookie(\'subscriber\', no, 0, COOKIEPATH, COOKIE_DOMAIN, false);
     }          
   }

   if (isset($_COOKIE[\'subscriber\']) && $post->ID == 2 || $post->ID == 10) {
     wp_safe_redirect(\'/page3/\');
     exit;
   }


}
add_filter(\'template_redirect\',\'set_newuser_cookie\',1);

SO网友:s_ha_dum

function template_redir_wpse_97315() {
   global $post;
   if (!isset($post->ID)) return;

   if ($post->ID == 1) {
     if (!isset($_COOKIE[\'subscriber\'])) {
        setcookie(\'subscriber\', no, 0, COOKIEPATH, COOKIE_DOMAIN, false);
     }          
   }

   if (is_single() && $post->ID == 2 && isset($_COOKIE[\'subscriber\'])) {
     wp_safe_redirect(home_url(\'/page-3/\'));
     exit;
   }
   
   if (is_single() && $post->ID == 2 && !isset ($_COOKIE[\'subscriber\'])) {
     wp_safe_redirect(home_url());
     exit;
   }
}
add_filter(\'template_redirect\',\'template_redir_wpse_97315\',1);
我承认我不太确定这个逻辑是否正确。你对重定向的描述加上你发布的代码让我有点困惑。然而,这应该是基本的想法。

岗位IDs显然是错的。你需要把这些整理一下。get_permalink(<post-id>) 应该这样做。您可能需要其他条件才能使这些重定向正常运行。

参考文献

http://codex.wordpress.org/Plugin_API/Action_Reference/template_redirect
http://codex.wordpress.org/Function_Reference/wp_safe_redirecthttp://codex.wordpress.org/Function_Reference/home_url

结束

相关推荐

Redirect wp-login

我有一个名为owner login的自定义页面wp_login_form()如何禁用wp登录。php,以便:当用户写入时wp-admin/ 当用户写入时,它会将其重定向到所有者登录(如果未登录)wp-login.php 它会将他重定向到所有者登录(已登录/未登录)通常,我不想显示wp登录,但要具有所需脚本的功能