Temel fark:
add_rewrite_rule()
Bir ekler belirli kural yorumlanır
add_rewrite_tag()
Bir ekleyen yer tutucu URL yapılarında kullanmak. Bu yer tutucu daha sonra birden çok kural üretmek için kullanılır.
Örneğin - çeşitli ülkelerdeki otellerin reklamını yapan bir seyahat acentesi olduğunuzu varsayalım. Bir otelin URL'sinin nasıl olmasını isteyebilirsiniz?
www.example.com/hotels/UK/Balmoral
Ülkenin (bu örnekte İngiltere) özel bir takson terimi ve Balmoral'ın bir otel olduğu (yazı tipi). Bunun için yeniden yazma kuralları ekleyebiliriz, ancak bunun için bir kural oluşturmamız gerekir:
- otel kendisi
- otelin ekleri
- Birkaç sayfa üzerine döküldüğü oteller (yazılar) kuralı
Bu kuralları oluşturmak karmaşık olabilir. Dahası, büyük olasılıkla WordPress'in yazı tipini kaydederken belirlediğimiz permastrüksiyondan oluşturulan bu yazı tipi için kendi kuralları ile rekabet edeceğiz . (Her durumda, WordPress'in işi yapmasına izin verin).
Bu 'permastructure' - kalıcı bağlantı ayarlarındaki gönderiler için ayarladığınıza benzer - WordPress'in oluşturduğu yeniden yazma kurallarını belirler. Ancak yorumlanmasını istediğimiz bazı bilinmeyenleri (ülke) içeren bir yapı istediğimiz için , formun bir yer tutucusunu sağlamamız gerekir %country%
. (Bu yazılar için neredeyse aynı %category%
).
Örneğin:
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);
}
Not: WordPress URL’yi URL’den nasıl oluşturacağınızı bilmiyor.%country%
etiketten - bunu yapmanız gerektiğini söylemeniz gerekir. (Bunu, aşağıda bağlantı verdiğim bir makalede anlatıyorum)
Eğer aracılığıyla alabilmesi Son olarak WordPress, eşleşen değeri saklar get_query_var()
(bir standart yeniden yazma kuralına bilmediğim bir şey).
Ayrıca mesajların permastrüksiyonunda kullanılacak etiketler oluşturabilirsiniz (Permalink ayarları sayfasında ayarlayın).
Bir etiket ekleyerek, onu permastructures içinde kullanabiliriz. WordPress o zaman bilir
- Ne bekleyebileceğinizi
- Url nasıl yorumlanır (eşleşip eşleşmediğini kontrol edin)
- Değer nasıl yorumlanır (örneğin 'İngiltere')
(Referans olarak bu makaleye bakın: http://wp.tutsplus.com/tutorials/creative-coding/the-rewrite-api-the-basics/ ).
Düzenle
Yorumlarda belirtildiği gibi, yukarıdaki örnek register_taxonomy()
aslında çağrıldığı gibi kötüdür.add_rewrite_tag()
.
Codex belgelerinin “kombinasyon halinde” kullanımıyla ilgili olarak: bu, her ikisi de bağımsız olarak kullanılabileceği için belki yanıltıcıdır. Bununla birlikte, yukarıda belirtildiği gibi, add_rewrite_tag()
etiket adını WordPress-anlama 'sorgu değişkenleri'ne ekler. Uygulamada bu, değeri almanıza izin verir get_query_var()
. Böylece, add_rewrite_rule()
kullanıldığında add_rewrite_tag()
, değişken WordPress tarafından saklanır. Ancak bunu yapmanın başka yolları da var ( bu cevaba bakınız - ayrıca Rob Vermeer'in yorumuna da dikkat edin).
Ayrıca ilgili: Yeniden yazılmış URL'lerden $ _GET değişkenleri nasıl alınır?
add_rewrite_tag()
yer tutucuların kullanılmasında kullanılabilirSettings->Permalinks
. Taksonomi kullanma hakkında, kullanmak için bir şartadd_rewrite_tag()
mıdır? Kodeks sayfasından aldığım izlenim, öyle olmadığı, ancak yaygın olarak kullanıldığı görülüyor. Kullandığım konusunda sorumu genişletilmişadd_rewrite_tag()
birlikteadd_rewrite_rule()
önerildiği üzere Codex sayfasında .