Ustawianie niestandardowych plików cookie w Wordpress

13

Próbuję ustawić pliki cookie, aby przekierowywać powracających użytkowników do mojej określonej strony w mojej witrynie Wordpress.

Chciałbym uzyskać porady dotyczące tych 2 rzeczy:

  1. Gdzie w plikach php Wordpress należy sprawdzić pliki cookie przed załadowaniem jakiejkolwiek zawartości do obsługi przekierowania? Czy istnieje dobry plik, w którym powinien istnieć nad innymi?
  2. Jak poprawnie ustawić ciasteczko w Wordpress? setcookie('cookie_name', 'cookie_value', time()+4000);Wygląda na to, że nie zapisuje żadnych plików cookie w moim systemie.
Atticus
źródło
Ach, zdałem sobie sprawę, że muszę podpiąć to do init (). ROZWIĄZANIE: Utworzyłem funkcję w functions.php, która ustawia i sprawdza ciasteczko. aby działało to poprawnie, po zdefiniowaniu funkcji, poza funkcją wywołać to: add
4
Możesz odpowiedzieć na własne pytanie ...
40XUserNotFound
2
W rzeczywistości jest to wyraźnie zalecane. Proszę odpowiedzieć samemu. Wysyłam to również do WordPress.SE, ponieważ wydaje się tam bardziej odpowiednie.
Dzięki chłopaki - nie zdawałem sobie sprawy, że istnieje obszar Wordpress. I dziękuję za wskazówkę, aby odpowiedzieć sobie :) APpreciated, +1.
Atticus,

Odpowiedzi:

17

1 - Możesz sprawdzić pliki cookie i dokonać przekierowania za pomocą haków, które są wywoływane przed każdym wyjściem, takim jak haczyk „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 - Najlepszym sposobem na ustawienie plików cookie byłoby użycie haka „init” w następujący sposób:

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

?>

Jest to bardziej spójne, jeśli masz blog na www.example.com/blog , stroje nie będą dostępne pod adresem

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

Aktualizacja

powinieneś także móc używać stałych COOKIE_PATH i COOKIEDOMAIN zamiast samemu je rozgryzać, co właśnie zauważyłem w odpowiedzi Andre R Kohla - drzaus

Nabil Kadimi
źródło
Jak umieścić wiele zmiennych, na przykład Imię, Nazwisko, Random1, Random2 zamiast tylko zmiennej „my_cookie_1”.?
Damainman
1
Po prostu dodaj więcejsetcookie()
Nabil Kadimi
Och, nie wiedziałem, że pliki cookie zawierają tylko jedną zmienną na plik cookie. Czy istnieje sposób na ustawienie wielu plików cookie bez potrzeby podawania powyższego kodu czasu i adresu URL, aby zmniejszyć liczbę kodów? Czy zostałyby umieszczone w zmiennej?
Damainman
powinieneś także być w stanie używać stałych COOKIEPATHiCOOKIEDOMAIN zamiast samemu je
rozgryzać
korekta: COOKIE_DOMAIN
drzaus
11

Prawdopodobnie powinieneś użyć stałych COOIKEPATHi COOKIE_DOMAINistniejących od WP 3.0

setcookie("your_cookie", $your_value, time()+3600, COOKIEPATH, COOKIE_DOMAIN);
André R. Kohl
źródło
7

Ach, zdałem sobie sprawę, że muszę to podłączyć init().

ROZWIĄZANIE: Utworzyłem funkcję w functions.php, która ustawia i sprawdza ciasteczko. aby działało to poprawnie, po zdefiniowaniu funkcji, poza funkcją wywołać to:

add_action('init', 'function-name'); 
Atticus
źródło
1

W ten sposób działało:

    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
źródło
Popraw formatowanie kodu.
Jevuska
Bardzo pomocna jest również niewielka treść na temat źródła.
bueltge