เมื่อใดควรใช้ add_rewrite_tag ()


22

ฉันใช้เวลาสองสามวันเพื่อเรียนรู้วิธีเพิ่มกฎการเขียนใหม่ให้ดีที่สุด จนถึงตอนนี้ความเข้าใจของฉันก็คือวิธีที่เหมาะสมในการเพิ่มกฎง่ายๆคือadd_rewrite_rules()ต้องขอบคุณJan Fabry อย่างมากในการแลกเปลี่ยนนี้

แม้ว่าเขาจะพูดถึงว่าadd_rewrite_tags()ฉันไม่ได้เห็นไกด์นำเที่ยวอธิบายเมื่อมันมีประโยชน์ในการใช้งานซึ่งตรงข้ามกับวิธีอื่น ๆ ในการเพิ่มกฎการเขียนซ้ำหรือตัวอย่างที่ดีเกี่ยวกับการใช้งาน ดูเหมือนว่าจะเป็นเครื่องมือที่ทรงพลังกว่า แต่นั่นก็เป็นเรื่องที่ฉันเข้าใจได้ ผมหาตัวอย่างใน Codex ที่จะเกินไปคลุมเครือหรือไม่สมบูรณ์ ใครบางคนสามารถอธิบายอย่างละเอียดเกี่ยวกับมันหรือชี้ไปที่ทรัพยากรบางอย่าง? ฉันพบว่าไม่มีประโยชน์ใน Google

แก้ไข: มัน Codex หน้าพูดคุยเกี่ยวกับ 'ทั่วไป' ใช้มันร่วมกับadd_rewrite_rules()แต่ไม่ได้ทำอย่างละเอียด ในทำนองเดียวกันหน้า Codexสำหรับการadd_rewrite_rules()อ้างอิงadd_rewrite_tags()แต่มันก็เบาบางมากในข้อมูล จะใช้ชุดค่าผสมดังกล่าวเมื่อใดและอย่างไร ตัวอย่างเดียวที่ฉันพบคือคำตอบโดย Rob Vermeerซึ่งฉันไม่เข้าใจ

คำตอบ:


21

ความแตกต่างพื้นฐานคือ:

  • 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
seron

คุณพูดถูกเกี่ยวกับ taxonomies (ตัวอย่างที่ไม่ดีในส่วนของฉัน) register_taxonomy()ดูส่วนหนึ่งของ ตัวอย่างที่ดีกว่าคือเมื่อคุณต้องการใช้สิ่งที่ชอบ%country%แต่เมื่อประเทศเป็นเพียงตัวแปรคิวรีทั่วไปและไม่ใช่อนุกรมวิธาน กรณีเหล่านี้เป็นของหายาก - add_rewrite_tag()ฉันไม่เคยมีการใช้งาน
Stephen Harris
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.