การตั้งค่าคุกกี้ที่กำหนดเองใน Wordpress


13

ฉันกำลังพยายามตั้งค่าคุกกี้เพื่อกำหนดเส้นทางผู้ใช้ที่กลับไปยังหน้าเฉพาะของฉันภายในไซต์ Wordpress ของฉัน

ฉันต้องการคำแนะนำเกี่ยวกับ 2 สิ่งเหล่านี้:

  1. ควรตรวจสอบคุกกี้ของไฟล์ php ที่ใดก่อนที่จะโหลดเนื้อหาใด ๆ เพื่อจัดการการเปลี่ยนเส้นทาง มีไฟล์ที่ดีที่ควรมีอยู่ในที่อื่น ๆ ?
  2. ฉันจะตั้งค่าคุกกี้อย่างถูกต้องภายใน Wordpress ได้อย่างไร setcookie('cookie_name', 'cookie_value', time()+4000);ดูเหมือนจะไม่บันทึกคุกกี้ใด ๆ ในระบบของฉัน

อ้าฉันรู้แล้วว่าฉันต้องขอสิ่งนี้ลงใน init () การแก้ไข: ฉันสร้างฟังก์ชั่นใน functions.php ที่จะตั้งค่าและตรวจสอบคุกกี้ เพื่อให้ทำงานอย่างถูกต้องหลังจากกำหนดฟังก์ชั่นนอกฟังก์ชั่นเรียกสิ่งนี้: add_action ('init', 'function-name');

4
คุณได้รับอนุญาตให้ตอบคำถามของคุณเอง ...
40XUserNotFound

2
ในความเป็นจริงมันได้รับการสนับสนุนอย่างชัดเจน โปรดตอบด้วยตัวเอง ฉันยังส่งสิ่งนี้ไปยัง WordPress ด้วยเช่นกันเนื่องจากมันเหมาะสมกว่า

ขอบคุณพวก - ฉันไม่ได้ตระหนักว่ามีพื้นที่ Wordpress และขอบคุณสำหรับเคล็ดลับที่จะตอบตัวเอง :) APpreciated, +1
Atticus

คำตอบ:


17

1 - คุณสามารถตรวจสอบคุกกี้และทำการเปลี่ยนเส้นทางของคุณโดยใช้ hooks ที่ถูกเรียกก่อนที่จะส่งออกใด ๆ เช่น 'init' hook:

<?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 - วิธีที่ดีที่สุดในการตั้งค่าคุกกี้คือใช้ตะขอ 'init' ดังนี้:

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

?>

สิ่งนี้สอดคล้องกันมากขึ้นหากคุณมีบล็อกที่www.example.com/blog coockie จะไม่สามารถใช้ได้ที่

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

ปรับปรุง

คุณควรจะสามารถใช้ค่าคงที่ของ COOKIE_PATH และ COOKIEDOMAIN ได้มากกว่าที่จะคิดออกเองซึ่งฉันเพิ่งสังเกตเห็นในคำตอบของ Andre R Kohl - drzaus


คุณใส่ varibles หลายตัวได้อย่างไรเช่น FirstName, LastName, Random1, Random2 แทนที่จะเป็นแค่ตัวแปร 'my_cookie_1'
Damainman

1
เพียงเพิ่มมากขึ้นsetcookie()
นาบิลคาดิมิ

โอ้ฉันไม่รู้ว่าคุกกี้มีตัวแปรเดียวเท่านั้นต่อคุกกี้ มีวิธีในการตั้งค่าคุกกี้หลายรายการโดยไม่จำเป็นต้องมีเวลาและรหัส URL ด้านบนเพื่อให้มีจำนวนน้อยลงหรือไม่ พวกเขาจะถูกวางลงในตัวแปรหรือไม่?
Damainman

คุณควรจะสามารถใช้COOKIEPATHและCOOKIEDOMAINค่าคงที่มากกว่าที่จะคิดออกเองซึ่งฉันเพิ่งสังเกตเห็นในคำตอบของ Andre R Kohl
drzaus

การแก้ไข: COOKIE_DOMAIN
drzaus

11

คุณอาจใช้ค่าคงที่COOIKEPATHและCOOKIE_DOMAINมีอยู่ตั้งแต่ WP 3.0

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

7

init()อาตระหนักฉันต้องการที่จะขอเข้ามาในนี้

แนวทางแก้ไข: ฉันสร้างฟังก์ชั่นใน functions.php ซึ่งจะตั้งค่าและตรวจสอบคุกกี้ เพื่อให้ทำงานอย่างถูกต้องหลังจากกำหนดฟังก์ชั่นนอกฟังก์ชั่นเรียกสิ่งนี้:

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

1

วิธีนี้ใช้ได้ผล:

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

    }

โปรดแก้ไขการจัดรูปแบบรหัสของคุณ
Jevuska

นอกจากนี้เนื้อหาเล็ก ๆ เกี่ยวกับแหล่งข้อมูลก็มีประโยชน์จริงๆ
เริ่มงาน
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.