Add_rewrite_tag () ne zaman kullanılmalıdır?


22

Birkaç gününü en iyi yeniden yazma kurallarını nasıl ekleyeceğimizi öğrenmeye çalıştım. Şimdiye kadar anladığım kadarıyla, basit kurallar eklemenin uygun bir yolunun kullanımıdır . Bu değişimdeki Jan Fabryadd_rewrite_rules() sayesinde büyük özenle hazırlanmıştır.

Yine de, add_rewrite_tags()yeniden yazma kuralları eklemenin başka yollarının veya kullanımına ilişkin iyi örneklerin aksine, ne zaman kullanmanın yararlı olacağını açıklayan bir rehber görmedim. Daha güçlü bir araç gibi gözüküyor, ama bu benim bildiğim her şey. Kodeks'teki örnekleri çok şifreli bulmaya çalışıyorum veya eksik . Biri bu konuda ayrıntılı bilgi verebilir veya bir kaynağa işaret edebilir mi? Google’da işe yarar bir şey bulamadım.

düzenleme: Its Codex sayfa 'genellikle' bahsediyor ile birlikte kullanmayaadd_rewrite_rules()karşın ayrıntılı etmez. Benzer şekilde, için Kodeks sayfası daadd_rewrite_rules()atıfta bulunuradd_rewrite_tags()ancak bilgi üzerinde çok seyrektir. Böyle bir kombinasyon ne zaman ve nasıl kullanılır? Bulduğum tek örnek,anlamadığım Rob Vermeer tarafından verilen cevap .

Yanıtlar:


21

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?


Bunun için teşekkürler. Cevabınızdan anladığım bir şey, içinde add_rewrite_tag()yer tutucuların kullanılmasında kullanılabilir Settings->Permalinks. Taksonomi kullanma hakkında, kullanmak için bir şart add_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()birlikte add_rewrite_rule()önerildiği üzere Codex sayfasında .
seron

Taksonomi konusunda kesinlikle haklısın (benim açımdan kötü bir örnek). Bu bölümüne bakın register_taxonomy(). Bunun gibi bir şeyi kullanmak istediğinizde daha iyi bir örnek olabilir, %country%ancak ülke yalnızca bir ortak değişken olduğunda bir taksonomi değil. Bu durumlar nadirdir - kullanmak zorunda kalmamıştım add_rewrite_tag().
Stephen Harris
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.