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.

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


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

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

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

    }

Veuillez corriger la mise en forme de votre code.
Jevuska

Un petit contenu sur la source est également très utile.
bueltge
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.