web-dev-qa-db-fra.com

Définir un cookie de redirection dans wordpress

J'ai cherché sur le net une solution à mon problème toute la journée, mais je ne peux rien comprendre à ce que je vois, car je ne connais absolument rien au codage.

Ce que j'aimerais faire:

  1. J'aimerais créer un cookie lorsqu'une personne visite une page particulière de mon site Web, appelons-le Page 1.
  2. Ensuite, lorsque ce visiteur accède à une autre page (page 2) indépendante, il est automatiquement redirigé vers la page 3 (en raison du cookie défini lors de la visite de la page 1). Les visiteurs sans cookie ne voient jamais la page 3.

Ce que j'ai réussi à faire jusqu'à présent:

J'ai réussi à installer le cookie dans le fichier functions.php de Wordpress en insérant les éléments suivants:

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

J'ai réussi à définir une redirection en insérant les éléments suivants dans functions.php:

if (!isset ($_COOKIE['subscriber']))
header ("Location: page2");
else
header ("Location: page3");

C'est tout ce que j'ai eu. Cela ne fonctionne pas, car aucun des éléments ci-dessus n'est spécifique à une page. Je souhaite uniquement que le cookie soit défini (ou que la variable soit modifiée) lorsque le visiteur visite une page spécifique, puis redirigé vers une autre page spécifique.

Est-ce faisable?

Oh, et d'ailleurs, je suis sur un site Wordpress auto-hébergé.

Merci beaucoup.

Sammie

1
Sammie

Ainsi, la seule partie qui manque à votre code vérifie la page sur laquelle vous vous trouvez actuellement. La fonction is_page () est un bon moyen d’obtenir ce contexte.

Vous pouvez l’essayer de cette façon (je ne l’ai pas testé, seulement un résumé de ma tête pour montrer le concept):

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);

La fonction wordpress is_page () prend l'identifiant de la page, le slug de la page ou le titre de la page comme paramètre. http://codex.wordpress.org/Function_Reference/is_page

Vous devriez également toujours quitter après une redirection, sinon l'utilisateur chargerait d'abord la page 2 avant d'être redirigé vers la page 3

1
s1lv3r
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);

J'avoue que je ne suis pas tout à fait sûr si la logique est la bonne. Votre description des redirections plus le code que vous avez posté m'a un peu confus. Cependant, cela devrait être l'idée de base.

Le post IDs est évidemment faux. Vous aurez besoin de les trier. get_permalink(<post-id>) devrait le faire. Vous aurez peut-être besoin d'autres conditions pour que ces redirections se comportent.

Référence

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

0
s_ha_dum

Cela fait s_ha_dum! Vous n'avez pas bien compris ce que je voulais, c'est de ma faute pour ne pas avoir été capable de l'expliquer correctement. Je ne voulais à aucun moment que le visiteur soit redirigé vers la page d'accueil.

Voici ce que j'ai réglé avec: (édité le 27 avril 2013)

J'ai toujours des problèmes cependant.

Le problème, c’est que cela fonctionne parfaitement sur mon Mac (Chrome, Safari et Firefox), mais pas sur mon PC. Sur le PC, les cookies sont correctement configurés, mais la redirection s'effectue indépendamment du fait que le cookie soit défini ou non.

Nouvelle édition: ça marche maintenant! Merci a tous. Le code ci-dessous fonctionne parfaitement.

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);
0
Sammie