WordPress Rewrite API

WordPress มี API ที่มีประโยชน์จริงๆเรียกว่า“ เขียน API ใหม่“ ฉันเดาว่ามี“ url rewriting” อยู่แล้วนี่เป็นกระบวนการที่ทำให้ URL อ่านง่ายขึ้น ตัวอย่างเช่น URL ที่เขียนเช่นนี้ http://mysite.com/?page=12&category=12&author=47 นั้นไม่ได้ดูดี มันยากที่จะจำได้และเครื่องมือค้นหาไม่ค่อยชอบเท่าไหร่ นั่นคือเหตุผลที่ CMS เกือบทุกตัวมีฟังก์ชันในตัวที่“ เขียนใหม่” URL ที่จะทำให้พวกเขามีลักษณะดังนี้: http://mysite.com/category/business/finance.


API การเขียนซ้ำและคลาส WP_Rewrite

ภายใน WordPress กระบวนการนี้เป็นที่รู้จักกันในนาม โครงสร้าง Permalinks. เมื่อคุณเปลี่ยนจากโครงสร้าง permalink เริ่มต้นเป็นโครงสร้างที่กำหนดเองคุณจะเปิดใช้งาน API การเขียนใหม่โดยอัตโนมัติ นี่เป็นระบบอัตโนมัติทั้งหมด แต่บางครั้งคุณต้องสร้างกฎการเขียนซ้ำที่กำหนดเองของคุณเอง.

ในโพสต์นี้เราจะสร้างฟังก์ชั่นง่าย ๆ เพื่อสร้างกฎการเขียนซ้ำแบบกำหนดเองอย่างง่าย สมมติว่าเราต้องการได้รับมูลค่าผู้อ้างอิงเทียบเท่ากับ $ _GET [‘ผู้อ้างอิง].

ถ้าเราดู Codex เราสามารถเห็นได้ในหน้าเขียนใหม่ API ว่า API นี้มีฟังก์ชันในตัว 6 ตัว การใช้งานการเขียนใหม่ที่พบบ่อยที่สุดคือการใช้ฟังก์ชั่นเหล่านี้มีบทแนะนำมากมายเกี่ยวกับสิ่งนั้นนั่นเป็นสาเหตุที่ฉันจะใช้ตัวกรองแทนฟังก์ชั่น เพราะใช่ API การเขียนซ้ำสามารถใช้กับตัวกรองได้! ตัวกรองเหล่านั้นแสดงอยู่ใน คลาส WP_Rewrite หน้า Codex.

เพิ่ม Query Var ใหม่

ในการเริ่มต้นเราต้องสร้างฟังก์ชั่นที่จะบอก WordPress ว่ามีการตั้งกฎการเขียนใหม่ นี่คืองานของ add_rewrite_rule () และ add_rewrite_tag ()  ฟังก์ชั่น แต่คุณสามารถทำได้โดยใช้ query_vars และ rewrite_rules_array ฟิลเตอร์ ในการทำเช่นนั้นเราจำเป็นต้องสร้างสองฟังก์ชันและสองตัวกรอง ฟังก์ชันแรกจะเพิ่มตัวแปรใหม่ให้กับตัวกรอง query_vars และฟังก์ชันที่สองจะลงทะเบียนตัวแปรใหม่นี้ในกฎการเขียนซ้ำทั่วโลก:

/ *
|--------------------------------------------------------------------------
| เริ่มเขียนซ้ำ ตัวอย่าง: http://mysite.com/referrer/remi
|--------------------------------------------------------------------------
* /

// ลงทะเบียน var ใหม่
ฟังก์ชั่น rc_add_query_vars ($ vars) {
$ vars [] = "ผู้อ้างอิง"; // ชื่อของ var ตามที่เห็นใน URL
ส่งกลับ $ vars
}

// ขอฟังก์ชั่นของเราใน query_vars
add_filter ('query_vars', 'rc_add_query_vars');

// เพิ่มกฎการเขียนใหม่ลงในรายการที่มีอยู่
ฟังก์ชัน rc_add_rewrite_rules ($ rules) {
$ new_rules = array ('referrer / ([^ /] +) /? $' => 'index.php? referrer = $ ตรงกับ [1]');
$ rules = $ new_rules + $ กฏ;
คืนกฎ $;
}

// ขอฟังก์ชั่นเข้าสู่ rewrite_rules_array
add_filter ('rewrite_rules_array', 'rc_add_rewrite_rules');

เมื่อคุณเพิ่มรหัสนี้ลงในไฟล์ปลั๊กอินหรือไฟล์ theme.php ของคุณไปที่การตั้งค่า> Permalinks และบันทึกโครงสร้าง permalinks การกระทำนี้เป็นสิ่งจำเป็น ตอนนี้คุณควรจะสามารถเข้าถึงเว็บไซต์ของคุณด้วยประเภทหรือ url: http://mysite.com/referrer/your-name หากคุณต้องการถูกเปลี่ยนเส้นทางในหน้าใดหน้าหนึ่งให้เปลี่ยน index.php? referrer = $ match [1] โดย index.php? pagename = my-page & referrer = $ ตรงกัน [1] โดยที่“ my-page” เป็นหน้าที่จะ เปลี่ยนเส้นทางไปกระสุน.

การดึงค่าตัวแปร

เมื่อกฎการเขียนซ้ำของคุณถูกตั้งค่าคุณอาจต้องการเข้าถึงค่าตัวแปร แต่ถ้าคุณทำ $ _GET ง่ายๆ [‘ผู้อ้างอิง]] คุณจะไม่ได้รับความคุ้มค่าใด ๆ ในการดึงค่า URL vars คุณต้องขอฟังก์ชั่นกับตัวกรอง“ template_redirect” การต่อฟิลเตอร์“ init” นั้นเร็วเกินไป จากนั้นคุณสามารถเข้าถึงตัวแปรที่จำเป็นผ่านทางวัตถุ $ wp_query นี่คือตัวอย่างด่วนของวิธีการ:

// ดึง URL var
ฟังก์ชั่น rc_get_my_vars () {
$ wp_query ทั่วโลก;

if (isset ($ wp_query-> query_vars ['referrer'])) {
$ referrer = get_query_var ('ผู้อ้างอิง');
}
}

// ขอฟังก์ชั่นเข้าสู่ template_redirect
add_action ('template_redirect', 'rc_get_my_vars');

คุณสามารถสะท้อนค่า $ ผู้อ้างอิงต่อไปหรือใช้ตามที่ได้ทำกับตัวแปร GET ปกติ.

แน่นอนคุณสามารถปรับเปลี่ยนใช้ตัวแปรมากกว่าหนึ่งตัว:

// ใน rc_add_query_vars ()
$ vars [] = "ผู้อ้างอิง";
$ vars [] = "แคมเปญ";

// ใน rc_add_rewrite_rules ()
$ new_rules = array ('referrer / ([^ /] +) / ([^ /] +) /? $' => 'index.php? pagename = หน้าของฉัน & ผู้อ้างอิง = $ ตรงกัน [1] & แคมเปญ = $ ที่ตรงกัน [ 2] ');

อย่าลืมว่าคุณต้องเปิดใช้โมดูล PHP mod_rewrite เพื่อใช้การเขียน url ใหม่.

Jeffrey Wilson Administrator
Sorry! The Author has not filled his profile.
follow me
    Like this post? Please share to your friends:
    Adblock
    detector
    map