Configurar cookies personalizadas en Wordpress

13

Estoy tratando de configurar cookies para redirigir a los usuarios que regresan a mi página específica dentro de mi sitio de Wordpress.

Me gustaría un consejo con estas 2 cosas:

  1. ¿En qué parte de los archivos php de Wordpress se deben verificar las cookies antes de cargar cualquier contenido para manejar una redirección? ¿Hay un buen archivo en el que debería existir sobre otros?
  2. ¿Cómo configuro correctamente una cookie en Wordpress? setcookie('cookie_name', 'cookie_value', time()+4000);no parece estar guardando ninguna cookie en mi sistema.
Atticus
fuente
Ah, me di cuenta de que necesitaba conectar esto al init (). SOLUCIÓN: Creé una función en functions.php que establecería y comprobaría la cookie. para que esto funcione correctamente, después de definir la función, fuera de la función, llame a esto: add_action ('init', 'function-name');
44
Puede responder a su propia pregunta ...
40XUserNotFound
2
De hecho, se recomienda explícitamente. Por favor, conteste usted mismo. También estoy enviando esto a WordPress.SE, ya que parece más apropiado allí.
Gracias chicos, no me di cuenta de que había un área de Wordpress. Y gracias por el consejo para responderme :) APrecio, +1s.
Atticus

Respuestas:

17

1 - Puede verificar si hay cookies y redirigirlas utilizando enlaces que se invocan antes de cualquier salida como el enlace '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 mejor manera de configurar cookies sería usar el enlace 'init' de esta manera:

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

?>

Esto es más coherente, si tiene un blog en www.example.com/blog , los coockie (s) no estarán disponibles en

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

Actualizar

también deberías poder usar las constantes COOKIE_PATH y COOKIEDOMAIN en lugar de descubrirlas tú mismo, lo que acabo de notar en la respuesta de Andre R Kohl - drzaus

Nabil Kadimi
fuente
¿Cómo se colocan varias variables, por ejemplo, Nombre, Apellido, Aleatorio1, Aleatorio2 en lugar de solo la variable 'my_cookie_1'?
Damainman
1
Solo agrega mássetcookie()
Nabil Kadimi
Oh, no sabía que las cookies solo contienen una variable por cookie. ¿Hay alguna manera de configurar varias cookies sin necesidad de tener el tiempo y el código de URL anterior para que sea menos código? ¿Se pondrían en una variable?
Damainman
también deberías poder usar las constantes COOKIEPATHy enCOOKIEDOMAIN lugar de descifrarlas tú mismo, lo que acabo de notar en la respuesta de Andre R Kohl
drzaus
corrección: COOKIE_DOMAIN
drzaus
11

Probablemente debería usar las constantes COOIKEPATHy COOKIE_DOMAIN, existentes desde WP 3.0

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

Ah, me di cuenta de que necesitaba conectar esto al init().

SOLUCIÓN: Creé una función en functions.php que establecería y comprobaría la cookie. para que esto funcione correctamente, después de definir la función, fuera de la función, llame a esto:

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

De esta manera funcionó:

    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
fuente
Por favor arregle el formato de su código.
Jevuska
También es útil un pequeño contenido sobre la fuente.
bueltge