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?
add_rewrite_tag()
dapat digunakan untuk membuat placeholder untuk digunakanSettings->Permalinks
. Tentang menggunakan taksonomi, apakah itu persyaratan untuk menggunakanadd_rewrite_tag()
? Kesan saya dari halaman Codex adalah tidak, tetapi sepertinya biasa digunakan. Saya memperluas pertanyaan saya sehubungan dengan penggunaanadd_rewrite_tag()
bersama dengan yangadd_rewrite_rule()
disarankan di halaman Codex .