Définition de cookies personnalisés dans Wordpress

13

J'essaie de définir des cookies pour rediriger les utilisateurs qui reviennent vers une page spécifique de mon site Wordpress.

Je voudrais quelques conseils avec ces 2 choses:

  1. Où dans les fichiers php Wordpress les cookies doivent-ils être vérifiés avant de charger du contenu pour gérer une redirection? Existe-t-il un bon fichier dans lequel cela devrait exister par rapport aux autres?
  2. Comment définir correctement un cookie dans Wordpress? setcookie('cookie_name', 'cookie_value', time()+4000);ne semble pas enregistrer de cookies sur mon système.
Atticus
la source
Ah, j'ai réalisé que je devais le brancher dans l'init (). SOLUTION: J'ai créé une fonction dans functions.php qui définirait et vérifierait le cookie. pour que cela fonctionne correctement, après avoir défini la fonction, en dehors de la fonction, appelez ceci: add_action ('init', 'function-name');
4
Vous êtes autorisé à répondre à votre propre question ...
40XUserNotFound
2
En fait, c'est explicitement encouragé. Veuillez y répondre vous-même. J'envoie également cela à WordPress.SE, car cela semble plus approprié là-bas.
Merci les gars - je ne savais pas qu'il y avait une zone Wordpress. Et merci pour l'astuce pour me répondre :) APpreciated, + 1s.
Atticus

Réponses:

17

1 - Vous pouvez vérifier les cookies et faire votre redirection en utilisant des hooks qui sont appelés avant toute sortie comme le hook '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 - La meilleure façon de définir des cookies serait d'utiliser le crochet 'init' comme ceci:

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

?>

Ceci est plus cohérent, si vous avez un blog sur www.example.com/blog , le ou les coockie (s) ne seront pas disponibles sur

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

Mise à jour

vous devriez également pouvoir utiliser les constantes COOKIE_PATH et COOKIEDOMAIN plutôt que de les découvrir vous-même, ce que je viens de remarquer dans la réponse d'Andre R Kohl - drzaus

Nabil Kadimi
la source
Comment vous mettez plusieurs variables, par exemple Firstname, LastName, Random1, Random2 au lieu de simplement la variable 'my_cookie_1'.?
Damainman
1
Ajoutez juste plussetcookie()
Nabil Kadimi
Oh, je ne savais pas que les cookies ne contiennent qu'une seule variable par cookie. Existe-t-il un moyen de définir plusieurs cookies sans avoir besoin d'avoir le code d'heure et d'URL ci-dessus pour qu'il en résulte moins de code? Seraient-ils placés dans une variable?
Damainman
vous devriez également être en mesure d'utiliser les constantes COOKIEPATHetCOOKIEDOMAIN plutôt que de les découvrir vous-même, ce que je viens de remarquer dans la réponse d'Andre R Kohl
drzaus
correction: COOKIE_DOMAIN
drzaus
11

Vous devriez probablement utiliser les constantes COOIKEPATHet COOKIE_DOMAIN, existantes depuis WP 3.0

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

Ah, j'ai réalisé que je devais accrocher ça dans le init().

SOLUTION: J'ai créé une fonction dans functions.php qui définirait et vérifierait le cookie. pour que cela fonctionne correctement, après avoir défini la fonction, en dehors de la fonction, appelez ceci:

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

Cette façon a fonctionné:

    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
la source
Veuillez corriger la mise en forme de votre code.
Jevuska
Un petit contenu sur la source est également très utile.
bueltge