Definindo cookies personalizados no Wordpress

10

Estou tentando definir cookies para redirecionar os usuários que retornaram para minha página específica em meu site Wordpress.

Gostaria de receber alguns conselhos sobre essas duas coisas:

  1. Onde nos arquivos php do Wordpress os cookies devem ser verificados antes de carregar qualquer conteúdo para lidar com um redirecionamento? Existe um bom arquivo que deve existir em detrimento de outros?
  2. Como faço para definir corretamente um cookie no Wordpress? setcookie('cookie_name', 'cookie_value', time()+4000); parece não estar salvando nenhum cookie no meu sistema.
por Atticus 02.07.2011 / 05:51

4 respostas

6

Ah, percebi que precisava ligar isso ao init() .

SOLUÇÃO: Eu criei uma função em functions.php que iria definir e verificar o cookie. para que isso funcione corretamente, depois de definir a função, fora da função chame isso:

add_action('init', 'function-name'); 
    
por Atticus 05.07.2011 / 06:33
12

1 - Você pode checar por cookies e fazer seu redirecionamento usando ganchos que são chamados antes de qualquer saída como o gancho '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 - A melhor maneira de definir cookies seria usando o gancho 'init' assim:

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

?>

Isso é mais consistente, se você tiver um blog em www.example.com/blog , os coockie (s) não estarão disponíveis em

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

Atualizar

  

você também deve ser capaz de usar as constantes COOKIE_PATH e COOKIEDOMAIN ao invés de descobrir elas mesmas, o que eu notei na resposta de Andre R Kohl - drzaus

    
por Nabil Kadimi 16.06.2012 / 15:17
9

Você provavelmente deve usar as constantes COOIKEPATH e COOKIE_DOMAIN , existentes desde o WP 3.0

setcookie("your_cookie", $your_value, time()+3600, COOKIEPATH, COOKIE_DOMAIN);
    
por André R. Kohl 19.04.2014 / 09:32
1

Este caminho funcionou:

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

    }
    
por Siddhartha Gautam 27.05.2016 / 10:17

Tags