Đặt cookie tùy chỉnh trong Wordpress


13

Tôi đang cố gắng đặt cookie để định tuyến lại người dùng trở lại một trang cụ thể trong trang Wordpress của tôi.

Tôi muốn một số lời khuyên với 2 điều sau:

  1. Các cookie php Wordpress nên được kiểm tra ở đâu trước khi tải bất kỳ nội dung nào để xử lý chuyển hướng? Có một tập tin tốt này nên tồn tại trên những người khác?
  2. Làm cách nào để đặt cookie đúng cách trong Wordpress? setcookie('cookie_name', 'cookie_value', time()+4000);dường như không lưu bất kỳ cookie nào vào hệ thống của tôi.

Ah, nhận ra tôi cần phải nối cái này vào init (). GIẢI PHÁP: Tôi đã tạo một hàm trong Hàm.php sẽ đặt và kiểm tra cookie. để điều này hoạt động chính xác, sau khi xác định hàm, bên ngoài hàm gọi hàm này: add_action ('init', 'function-name');

4
Bạn được phép trả lời câu hỏi của riêng mình ...
40XUserNotFound

2
Trong thực tế, nó được khuyến khích rõ ràng. Hãy tự trả lời. Tôi cũng đang gửi cái này đến WordPress.SE, vì nó có vẻ phù hợp hơn ở đó.

Cảm ơn mọi người - tôi đã không nhận ra có một khu vực Wordpress. Và cảm ơn vì mẹo để tự trả lời :) Được đánh giá cao, +1.
Atticus

Câu trả lời:


17

1 - Bạn có thể kiểm tra cookie và thực hiện chuyển hướng của mình bằng cách sử dụng các hook được gọi trước bất kỳ đầu ra nào như hook '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 - Cách tốt nhất để đặt cookie sẽ là sử dụng hook 'init' như thế này:

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

?>

Điều này phù hợp hơn, nếu bạn có một blog tại www.example.com/blog , coockie (s) sẽ không có sẵn tại

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

Cập nhật

bạn cũng có thể sử dụng các hằng số COOKIE_PATH và COOKIEDOMAIN thay vì tự mình tìm ra chúng, điều mà tôi vừa nhận thấy trong câu trả lời của Andre R Kohl - drzaus


Làm thế nào bạn đặt nhiều varibles, ví dụ Firstname, LastName, Random1, Random2 thay vì chỉ biến 'my_cookie_1'.?
Damainman

1
Chỉ cần thêm nhiều hơnsetcookie()
Nabil Kadimi

Ồ, tôi không biết cookie chỉ giữ một biến cho mỗi cookie. Có cách nào để đặt nhiều cookie mà không cần phải có mã thời gian và url ở trên để số lượng mã ít hơn không? Họ sẽ được đưa vào một biến?
Damainman

bạn cũng sẽ có thể sử dụng COOKIEPATHCOOKIEDOMAINhằng số chứ không phải tìm chúng ra cho mình, mà tôi chỉ nhận thấy trong Andre R Kohl của câu trả lời
drzaus

sửa chữa: COOKIE_DOMAIN
drzaus

11

Có lẽ bạn nên sử dụng các hằng số COOIKEPATHCOOKIE_DOMAIN, hiện có từ WP 3.0

setcookie("your_cookie", $your_value, time()+3600, COOKIEPATH, COOKIE_DOMAIN);

7

Ah, nhận ra tôi cần phải móc cái này vào init().

GIẢI PHÁP: Tôi đã tạo một hàm trong Hàm.php sẽ đặt và kiểm tra cookie. để điều này hoạt động đúng, sau khi xác định hàm, bên ngoài hàm gọi đây:

add_action('init', 'function-name'); 

1

Cách này hiệu quả:

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

    }

Vui lòng sửa định dạng mã của bạn.
Jevuska

Ngoài ra một nội dung nhỏ về nguồn thực sự hữu ích.
bueltge
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.