Festlegen von benutzerdefinierten Cookies in Wordpress

13

Ich versuche Cookies zu setzen, um wiederkehrende Benutzer zu einer bestimmten Seite auf meiner Wordpress-Site umzuleiten.

Ich hätte gerne einen Rat mit diesen beiden Dingen:

  1. Wo in den Wordpress-PHP-Dateien sollten Cookies überprüft werden, bevor Inhalte für die Weiterleitung geladen werden? Gibt es eine gute Datei, in der es mehr als andere geben sollte?
  2. Wie setze ich ein Cookie in Wordpress richtig? setcookie('cookie_name', 'cookie_value', time()+4000);scheint keine Cookies in meinem System zu speichern.
Atticus
quelle
Ah, mir wurde klar, dass ich dies in init () einbinden musste. LÖSUNG: Ich habe in functions.php eine Funktion erstellt, die das Cookie setzt und überprüft. Damit dies nach dem Definieren der Funktion ordnungsgemäß funktioniert, rufen Sie außerhalb der Funktion Folgendes auf: add_action ('init', 'Funktionsname');
4
Du
darfst
2
Es wird ausdrücklich empfohlen. Bitte beantworten Sie es selbst. Ich sende dies auch an WordPress.SE, da es dort passender erscheint.
Danke Jungs - ich wusste nicht, dass es einen Wordpress-Bereich gibt. Und danke für den Tipp, mir selbst zu antworten :) APreciated, + 1s.
Atticus

Antworten:

17

1 - Sie können nach Cookies suchen und Ihre Weiterleitung mithilfe von Hooks ausführen, die vor jeder Ausgabe aufgerufen werden, z. B. dem 'init'-Hook:

<?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 - Der beste Weg, Cookies zu setzen, ist die Verwendung des 'init'-Hakens wie folgt:

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

?>

Dies ist konsistenter, wenn Sie ein Blog unter www.example.com/blog haben , sind die Coockies unter nicht verfügbar

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

Aktualisieren

Sie sollten auch in der Lage sein, die Konstanten COOKIE_PATH und COOKIEDOMAIN zu verwenden, anstatt sie selbst herauszufinden, was mir gerade in Andre R Kohls Antwort aufgefallen ist - drzaus

Nabil Kadimi
quelle
Wie setzen Sie mehrere Variablen ein, z. B. Vorname, Nachname, Zufall1, Zufall2, anstatt nur die Variable 'my_cookie_1'?
Damainman
1
setcookie()
Füge
Oh, ich wusste nicht, dass Cookies nur eine Variable pro Cookie enthalten. Gibt es eine Möglichkeit, mehrere Cookies zu setzen, ohne den obigen Zeit- und URL-Code zu benötigen, sodass weniger Code erforderlich ist? Würden sie in eine Variable geschrieben werden?
Damainman
Sie sollten die auch nutzen können COOKIEPATHund COOKIEDOMAINKonstanten , anstatt sie aus sich selbst herauszufinden, was ich gerade in bemerkt Andre R Kohls Antwort
drzaus
Korrektur: COOKIE_DOMAIN
drzaus
11

Sie sollten wahrscheinlich die Konstanten COOIKEPATHund verwenden COOKIE_DOMAIN, die seit WP 3.0 existieren

setcookie("your_cookie", $your_value, time()+3600, COOKIEPATH, COOKIE_DOMAIN);
André R. Kohl
quelle
7

Ah, mir wurde klar, dass ich das hier einhängen musste init().

LÖSUNG: Ich habe in functions.php eine Funktion erstellt, die das Cookie setzt und überprüft. Damit dies ordnungsgemäß funktioniert, rufen Sie nach dem Definieren der Funktion außerhalb der Funktion Folgendes auf:

add_action('init', 'function-name'); 
Atticus
quelle
1

So hat es funktioniert:

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

    }
Siddhartha Gautam
quelle
Bitte korrigieren Sie Ihre Code-Formatierung.
Jevuska
Auch ein kleiner Inhalt über die Quelle ist sehr hilfreich.
Bueltge