it-swarm.com.de

Setzen eines Redirect-Cookies in WordPress

Ich habe den ganzen Tag im Internet nach einer Lösung für mein Problem gesucht, aber ich kann nichts verstehen, was ich sehe, da ich absolut NICHTS über Codierung weiß.

Was ich gerne machen würde:

  1. Ich möchte ein Cookie setzen, wenn eine Person eine bestimmte Seite auf meiner Website besucht. Nennen wir es Seite 1.
  2. Wenn dieser Besucher dann zu einer anderen Seite (Seite 2) wechselt, wird er automatisch zu Seite 3 weitergeleitet (aufgrund des Cookies, das beim Besuch von Seite 1 festgelegt wurde). Besucher ohne den Cookie werden nie etwas sehen.

Was ich bisher geschafft habe:

Ich habe es geschafft, das Cookie in Wordpress functions.php zu setzen, indem ich Folgendes einfügte:

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

Ich habe es geschafft, eine Weiterleitung zu definieren, indem ich Folgendes in functions.php eingefügt habe:

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

So weit bin ich gekommen. Dies funktioniert nicht, da keines der oben genannten Elemente seitenabhängig ist. Ich möchte nur, dass das Cookie gesetzt (oder die Variable geändert) wird, wenn der Besucher eine bestimmte Seite besucht und dann umgeleitet wird, wenn er eine andere bestimmte Seite besucht.

Ist das machbar?

Übrigens, ich bin auf einer selbst gehosteten Wordpress-Site.

Vielen Dank.

Sammie

1
Sammie

Der einzige Teil, der in Ihrem Code fehlt, ist die Überprüfung der Seite, auf der Sie sich gerade befinden. Die Funktion is_page () ist eine gute Möglichkeit, diesen Kontext abzurufen.

Sie könnten es auf diese Weise versuchen (ich habe es nicht getestet, sondern nur aus dem Kopf geschrieben, um das Konzept zu zeigen):

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

Die Funktion wordpress is_page () verwendet entweder die Seiten-ID, den Seiten-Slug oder den Seitentitel als Parameter. http://codex.wordpress.org/Function_Reference/is_page

Sie sollten auch immer nach einer Umleitung schließen, da der Benutzer sonst zuerst Seite-2 laden würde, bevor er zu Seite-3 umgeleitet wird

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

Ich gebe zu, dass ich nicht ganz sicher bin, ob die Logik stimmt. Die Beschreibung der Weiterleitungen und der von Ihnen veröffentlichte Code haben mich ein wenig verwirrt. Dies sollte jedoch die Grundidee sein.

Die postIDs sind offensichtlich falsch. Sie müssen diese aussortieren. get_permalink(<post-id>) sollte es tun. Möglicherweise benötigen Sie andere Bedingungen, damit sich diese Weiterleitungen verhalten.

Referenz

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

Das hat es s_ha_dum getan! Du hast nicht ganz verstanden, was ich wollte, das ist mein Fehler, weil ich es nicht richtig erklären konnte. Ich wollte nicht, dass der Besucher zu irgendeinem Zeitpunkt auf die Homepage weitergeleitet wird.

Hier ist, womit ich mich abgefunden habe: (bearbeitet am 27. April 2013)

Ich habe immer noch Probleme.

Das Problem ist, dass es auf meinem Mac (Chrome, Safari und Firefox) einwandfrei funktioniert, auf meinem PC jedoch nicht. Auf dem PC werden die Cookies einwandfrei gesetzt, die Weiterleitung erfolgt jedoch unabhängig davon, ob das Cookie gesetzt ist oder nicht.

Neue Bearbeitung: Funktioniert jetzt! Vielen Dank an alle. Der folgende Code funktioniert einwandfrei.

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