Kapan sebaiknya add_rewrite_tag () digunakan?

22

Saya telah menghabiskan beberapa hari mencoba mempelajari cara terbaik untuk menambahkan aturan penulisan ulang. Sejauh ini pemahaman saya adalah bahwa cara yang cocok untuk menambahkan aturan sederhana adalah dengan menggunakan add_rewrite_rules(), dengan terima kasih banyak kepada Jan Fabry atas pertukaran ini yang elaborasinya telah sangat bermanfaat.

Meskipun dia menyebutkan add_rewrite_tags()saya belum melihat panduan tentang menjelaskan kapan menggunakannya bermanfaat, sebagai lawan dari cara lain untuk menambahkan aturan menulis ulang, atau contoh bagus tentang penggunaannya. Tampaknya menjadi alat yang lebih kuat, tapi hanya itu yang bisa saya pahami. Saya menemukan contoh di Codex terlalu samar atau tidak lengkap . Bisakah seseorang menguraikannya atau menunjuk ke beberapa sumber daya? Saya menemukan tidak ada yang berguna di Google.

edit: Its halaman Codex berbicara tentang 'umumnya' menggunakannya dalam hubungannya denganadd_rewrite_rules(), tetapi tidak menjelaskan. Demikian pula halaman Codex untukadd_rewrite_rules()merujukadd_rewrite_tags()tetapi juga sangat jarang pada informasi. Kapan dan bagaimana kombinasi seperti itu digunakan? Satu-satunya contoh yang saya temukan adalah jawaban oleh Rob Vermeer yang saya tidak mengerti.

khotbah
sumber

Jawaban:

21

Perbedaan mendasar adalah:

  • The add_rewrite_rule()menambahkan aturan tertentu yang ditafsirkan
  • The add_rewrite_tag()menambahkan placeholder untuk digunakan dalam struktur url. Placeholder ini kemudian digunakan untuk menghasilkan beberapa aturan.

Misalnya - anggap Anda seorang agen perjalanan yang mengiklankan hotel di berbagai negara. Anda mungkin ingin seperti url hotel

  www.example.com/hotels/UK/Balmoral

Di mana negara (Inggris dalam contoh ini) adalah istilah taksonomi khusus dan Balmoral adalah hotel (tipe pos). Kita dapat menambahkan aturan penulisan ulang untuk ini, tetapi kemudian kita harus membuat aturan untuk:

  • hotel itu sendiri
  • lampiran hotel
  • Aturan untuk hotel (pos) di mana ia tumpah ke beberapa halaman dll.

Membuat aturan-aturan ini bisa menjadi rumit. Terlebih lagi kita mungkin akan bersaing dengan aturan WordPress sendiri untuk tipe posting itu - dihasilkan dari permastruktur yang kita atur saat mendaftarkan tipe posting. (Bagaimanapun, biarkan WordPress melakukan pekerjaannya).

'Permastruktur' ini - mirip dengan apa yang Anda atur untuk posting di pengaturan permalink - menentukan aturan penulisan ulang yang dihasilkan WordPress. Tetapi karena kita menginginkan struktur yang mengandung beberapa yang tidak diketahui (negara) - yang ingin kita tafsirkan - kita perlu menyediakan placeholder dari formulir tersebut %country%. (Ini hampir identik dengan %category%untuk posting).

Sebagai contoh:

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

Catatan: WordPress tidak tahu cara membuat url dari %country%tag - Anda perlu mengatakannya lakukan itu. (Saya membahas hal ini dalam artikel yang saya tautkan di bawah).

Akhirnya WordPress juga akan menyimpan nilai yang cocok sehingga Anda dapat mengambilnya melalui get_query_var()(sesuatu yang tidak Anda lakukan dengan aturan penulisan ulang standar).

Anda juga dapat membuat tag untuk digunakan dalam permastruktur posting (atur di halaman pengaturan Permalink).

Dengan menambahkan tag, kita dapat menggunakannya dalam permastruktur. WordPress lalu tahu

  • Apa yang diharapkan
  • Cara menafsirkan url (periksa cocok)
  • Cara menginterpretasikan nilai (yaitu 'UK')

(Sebagai referensi lihat artikel ini saya menulis: http://wp.tutsplus.com/tutorials/creative-coding/the-rewrite-api-the-basics/ ).

Edit

Seperti disebutkan dalam komentar, contoh di atas adalah buruk seperti register_taxonomy()pada kenyataannya panggilan add_rewrite_tag().

Mengenai dokumentasi Codex tentang penggunaannya 'dalam kombinasi': ini mungkin menyesatkan karena keduanya dapat digunakan secara independen. Namun, seperti disebutkan di atas, add_rewrite_tag()menambahkan nama tag ke WordPress-mengerti 'variabel permintaan'. Dalam praktiknya ini memungkinkan Anda untuk mengambil nilai dengan get_query_var(). Dengan demikian, ketika add_rewrite_rule()digunakan dengan add_rewrite_tag(), variabel akan disimpan oleh WordPress. Tetapi ada cara lain untuk melakukan ini (lihat jawaban ini - perhatikan juga komentar Rob Vermeer).

Juga terkait: Bagaimana cara mengambil variabel $ _GET dari URL yang ditulis ulang?

Stephen Harris
sumber
Terima kasih untuk ini. Satu hal yang saya mengerti dari jawaban Anda adalah yang add_rewrite_tag()dapat digunakan untuk membuat placeholder untuk digunakan Settings->Permalinks. Tentang menggunakan taksonomi, apakah itu persyaratan untuk menggunakan add_rewrite_tag()? Kesan saya dari halaman Codex adalah tidak, tetapi sepertinya biasa digunakan. Saya memperluas pertanyaan saya sehubungan dengan penggunaan add_rewrite_tag()bersama dengan yang add_rewrite_rule()disarankan di halaman Codex .
seron
Anda benar tentang taksonomi (contoh buruk bagi saya). Lihat bagian ini register_taxonomy(). Contoh yang lebih baik adalah ketika Anda ingin menggunakan sesuatu seperti %country%tetapi ketika negara hanyalah variabel permintaan yang umum dan bukan taksonomi. Kasing ini jarang - saya belum pernah menggunakannya add_rewrite_tag().
Stephen Harris