web-dev-qa-db-fra.com

Définir des cookies personnalisés dans Wordpress

J'essaie de configurer les cookies pour rediriger les utilisateurs revenant sur 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 devraient-ils être vérifiés avant de charger du contenu pour gérer une redirection? Existe-t-il un bon fichier qui devrait exister par-dessus d’autres?
  2. Comment définir correctement un cookie dans Wordpress? setcookie('cookie_name', 'cookie_value', time()+4000); ne semble pas enregistrer de cookies dans mon système.
11
Atticus

Ah, je me suis rendu compte que je devais accrocher cela à la init().

SOLUTION: J'ai créé une fonction dans functions.php qui définissait et vérifiait 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'); 
6
Atticus

1 - Vous pouvez rechercher des cookies et effectuer votre redirection à l'aide de hooks appelés avant toute sortie telle que 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 créer 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 à www.example.com/blog , le ou les coockie (s) ne seront pas disponibles à

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

Mettre à jour

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

15
Nabil Kadimi

Vous devriez probablement utiliser les constantes COOIKEPATH et COOKIE_DOMAIN, existantes depuis WP 3.0.

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

Cette manière travaillée:

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

    }
1