Mengatur cookie khusus di Wordpress

13

Saya mencoba mengatur cookie untuk merutekan kembali pengguna yang kembali ke halaman spesifik saya di dalam situs Wordpress saya.

Saya ingin saran dengan 2 hal ini:

  1. Di mana dalam file php Wordpress harus diperiksa cookie sebelum memuat konten apa pun untuk menangani pengalihan? Apakah ada file bagus yang harus ada di atas yang lain?
  2. Bagaimana cara mengatur cookie dengan benar di dalam Wordpress? setcookie('cookie_name', 'cookie_value', time()+4000);sepertinya tidak menyimpan cookie apa pun ke sistem saya.
Atticus
sumber
Ah, sadar aku perlu menghubungkan ini ke init (). SOLUSI: Saya membuat fungsi di functions.php yang akan mengatur dan memeriksa cookie. agar ini berfungsi dengan baik, setelah mendefinisikan fungsi, di luar fungsi panggil ini: add_action ('init', 'function-name');
4
Anda diizinkan untuk menjawab pertanyaan Anda sendiri ...
40XUserNotFound
2
Bahkan, ini didorong secara eksplisit. Harap jawab sendiri. Saya juga mengirim ini ke WordPress.SE, karena sepertinya lebih cocok di sana.
Terima kasih teman-teman - saya tidak menyadari ada area Wordpress. Dan terima kasih atas tipnya untuk menjawab sendiri :) Penghargaan, +1.
Atticus

Jawaban:

17

1 - Anda dapat memeriksa cookie dan melakukan pengalihan menggunakan kait yang dipanggil sebelum output apa pun seperti kait '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 - Cara terbaik untuk mengatur cookie adalah menggunakan kait 'init' seperti ini:

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

?>

Ini lebih konsisten, jika Anda memiliki blog di www.example.com/blog , coockie (s) tidak akan tersedia di

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

Memperbarui

Anda juga harus dapat menggunakan konstanta COOKIE_PATH dan COOKIEDOMAIN daripada mencari sendiri, yang saya perhatikan dalam jawaban Andre R Kohl - drzaus

Nabil Kadimi
sumber
Bagaimana Anda menempatkan beberapa variabel, misalnya Firstname, LastName, Random1, Random2, bukan hanya variabel 'my_cookie_1'.?
Damainman
1
Tambahkan sajasetcookie()
Nabil Kadimi
Oh, saya tidak tahu cookie hanya menampung satu variabel per cookie. Apakah ada cara untuk mengatur beberapa cookie tanpa perlu memiliki waktu dan kode url di atas sehingga jumlahnya lebih sedikit kode? Apakah mereka akan dimasukkan ke dalam variabel?
Damainman
Anda juga harus bisa menggunakan konstanta COOKIEPATHdanCOOKIEDOMAIN bukannya mencari tahu sendiri, yang baru saja saya perhatikan dalam jawaban Andre R Kohl
drzaus
koreksi: COOKIE_DOMAIN
drzaus
11

Anda mungkin harus menggunakan konstanta COOIKEPATHdanCOOKIE_DOMAIN , sudah ada sejak WP 3.0

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

Ah, sadar aku perlu menghubungkan ini ke dalam init() .

SOLUSI: Saya membuat fungsi di functions.php yang akan mengatur dan memeriksa cookie. agar ini berfungsi dengan baik, setelah mendefinisikan fungsi, di luar fungsi panggil ini:

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

Cara ini berhasil:

    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
sumber
Harap perbaiki pemformatan kode Anda.
Jevuska
Juga konten kecil tentang sumbernya sangat membantu.
bueltge