Configurando cookies personalizados no Wordpress

13

Estou tentando definir cookies para redirecionar os usuários que retornam para uma página específica no meu site do Wordpress.

Eu gostaria de alguns conselhos com estas 2 coisas:

  1. Onde nos arquivos php do Wordpress os cookies devem ser verificados antes de carregar qualquer conteúdo para manipular um redirecionamento? Existe um bom arquivo em que isso exista sobre 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.
Atticus
fonte
Ah, percebi que precisava conectar isso no init (). SOLUÇÃO: Criei uma função no functions.php que definiria e verificaria o cookie. para que isso funcione corretamente, após definir a função, fora da função, chame-o: add_action ('init', 'function-name');
4
Você está autorizado a responder a sua própria pergunta ...
40XUserNotFound
2
De fato, é explicitamente encorajado. Por favor, responda você mesmo. Também estou enviando isso para o WordPress.SE, pois parece mais apropriado lá.
Obrigado pessoal - eu não sabia que havia uma área do Wordpress. E obrigado pela dica para me responder :) APreciado, + 1s.
Atticus

Respostas:

17

1 - Você pode verificar se há cookies e redirecionar usando ganchos 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ê possui um blog em www.example.com/blog , o (s) coockie (s) não estará disponível em

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

Atualizar

você também deve poder usar as constantes COOKIE_PATH e COOKIEDOMAIN em vez de descobrir você mesmo, o que eu acabei de notar na resposta de Andre R Kohl - drzaus

Nabil Kadimi
fonte
Como você coloca várias variáveis, por exemplo, Nome, Sobrenome, Aleatório1, Aleatório2 em vez de apenas a variável 'my_cookie_1'.?
Damainman
1
Basta adicionar mais #setcookie()
Nabil Kadimi 27/10/2013
Ah, eu não sabia que os cookies contêm apenas uma variável por cookie. Existe uma maneira de definir vários cookies sem precisar ter o tempo e o código de URL acima, para que isso signifique menos código? Eles seriam colocados em uma variável?
Damainman 27/10
você também deve ser capaz de usar os COOKIEPATHe COOKIEDOMAINconstantes ao invés de descobrir-los você mesmo, que eu só notei em Andre R Kohl resposta
drzaus
correção: COOKIE_DOMAIN
drzaus 11/12/2015
11

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

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

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

SOLUÇÃO: Criei uma função no functions.php que definiria e verificaria o cookie. para que isso funcione corretamente, após definir a função, fora da função, chame isto:

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

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

    }
Siddhartha Gautam
fonte
Corrija a formatação do seu código.
Jevuska 27/05
Também um pequeno conteúdo sobre a fonte é realmente útil.
bueltge