ความแตกต่างพื้นฐานคือ:
add_rewrite_rule()
เพิ่มกฎโดยเฉพาะอย่างยิ่งที่จะตีความ
add_rewrite_tag()
เพิ่มตัวยึดที่จะใช้ในโครงสร้าง URL ตัวยึดตำแหน่งนี้จะถูกใช้เพื่อสร้างกฎหลายข้อ
ตัวอย่างเช่นสมมติว่าคุณเป็น บริษัท ตัวแทนโฆษณาท่องเที่ยวในหลายประเทศ คุณอาจต้องการให้ URL ของโรงแรมเป็นเหมือน
www.example.com/hotels/UK/Balmoral
ในกรณีที่ประเทศ (สหราชอาณาจักรในตัวอย่างนี้) เป็นคำเรียกแท็กซี่ที่กำหนดเองและบัลมอรัลเป็นโรงแรม (ประเภทโพสต์) เราสามารถเพิ่มกฎการเขียนซ้ำสำหรับสิ่งนี้ได้ แต่จากนั้นเราจะต้องสร้างกฎสำหรับ:
- ตัวโรงแรมเอง
- สิ่งที่แนบมาของโรงแรม
- กฎสำหรับโรงแรม (โพสต์) ที่มีการรั่วไหลไปหลายหน้าเป็นต้น
การสร้างกฎเหล่านี้อาจซับซ้อน นอกจากนี้เราอาจจะต้องแข่งขันกับกฎของ WordPress สำหรับโพสต์ประเภทนั้น - สร้างจากpermast โครงสร้างที่เราตั้งไว้เมื่อลงทะเบียนประเภทโพสต์ (ในกรณีใด ๆ ให้ WordPress ทำงานได้)
สิ่งนี้ 'permast โครงสร้าง' - คล้ายกับสิ่งที่คุณกำหนดไว้สำหรับการโพสต์ในการตั้งค่า permalink - กำหนดกฎการเขียนซ้ำที่ WordPress สร้างขึ้น แต่เนื่องจากเราต้องการโครงสร้างซึ่งมีบางส่วนที่ไม่รู้จัก (ประเทศ) - ซึ่งเราต้องการการตีความ - %country%
เราต้องให้ตัวยึดของรูปแบบ (เกือบเหมือน%category%
สำหรับโพสต์)
ตัวอย่างเช่น:
add_action_init('init','wpse71305_register_types');
function wpse71305_register_types(){
//You'll need to register the country taxonomy here too.
//Add 'country' tag.
add_rewrite_tag('%country%', '([^&/]+)'));
//Register hotel post type with %country$ tag
$args = array(
...
'has_archive'=>true,
'rewrite' => array(
'slug'=>'hotels/%country%',
'with_front'=> false,
'feed'=> true,
'pages'=> true
)
...
);
register_post_type('hotel',$args);
}
หมายเหตุ: WordPress ไม่รู้วิธีสร้าง url จาก%country%
แท็ก - คุณต้องบอกให้ทำอย่างนั้น (ฉันพูดถึงเรื่องนี้ในบทความที่ฉันลิงก์ไว้ด้านล่าง)
ในที่สุด WordPress ก็จะเก็บค่าที่ตรงกันเพื่อให้คุณสามารถเรียกคืนได้ผ่านทางget_query_var()
(สิ่งที่คุณไม่มีกฎการเขียนซ้ำมาตรฐาน)
คุณยังสามารถสร้างแท็กที่จะใช้ใน permast โครงสร้างของโพสต์ (ตั้งค่าในหน้าการตั้งค่า Permalink)
โดยการเพิ่มแท็กเราสามารถใช้มันใน permastructures WordPress รู้แล้ว
- คาดหวังอะไร
- วิธีตีความ url (ตรวจสอบว่าตรงกัน)
- วิธีตีความค่า (เช่น 'สหราชอาณาจักร')
(ตามที่อ้างอิงดูบทความนี้ฉันเขียนว่า: http://wp.tutsplus.com/tutorials/creative-coding/the-rewrite-api-the-basics/ )
แก้ไข
ตามที่ระบุไว้ในการแสดงความคิดเห็นตัวอย่างข้างต้นเป็นที่น่าสงสารในการเรียกความเป็นจริงregister_taxonomy()
add_rewrite_tag()
เกี่ยวกับเอกสาร Codex เกี่ยวกับการใช้ 'ร่วมกัน': นี่อาจทำให้เข้าใจผิดเนื่องจากทั้งคู่สามารถใช้งานได้อย่างอิสระ อย่างไรก็ตามดังที่ระบุไว้ข้างต้นอย่างไรก็ตามadd_rewrite_tag()
เพิ่มชื่อแท็กใน WordPress-เข้าใจ 'ตัวแปรแบบสอบถาม' get_query_var()
ในการปฏิบัตินี้ช่วยให้คุณสามารถเรียกคืนค่าด้วย ดังนั้นเมื่อadd_rewrite_rule()
ใช้กับadd_rewrite_tag()
ตัวแปรจะถูกเก็บไว้โดย WordPress แต่มีวิธีอื่นในการทำเช่นนี้ (ดูคำตอบนี้โปรดทราบความคิดเห็นของ Rob Vermeer ด้วย)
สิ่งที่เกี่ยวข้อง: วิธีการเรียกตัวแปร $ _GET จาก URL ที่เขียนใหม่?
add_rewrite_tag()
Settings->Permalinks
เกี่ยวกับการใช้อนุกรมวิธานมันเป็นข้อกำหนดสำหรับการใช้งานadd_rewrite_tag()
หรือไม่? การแสดงผลของฉันจากหน้า Codexคือมันไม่ได้ แต่ดูเหมือนว่าใช้กันทั่วไป ผมขยายคำถามของฉันเกี่ยวกับการใช้add_rewrite_tag()
ร่วมกับการadd_rewrite_rule()
ตามข้อเสนอแนะในหน้า Codex