Özel sınıflandırma URL'lerinizi sırayla alın


Kabul edelim, taksonomiye dayalı URL'ler, taksonominin gerçek adı olmadan çok daha güzel görünür ( /recipes/pizzas /recipes/recipe_categories/pizzas – bir recipe özel yazı tipiniz ve recipe_category özel taksonominiz olduğunu varsayarsak), değere hiçbir şey eklemez , URL'lerinizi daha uzun ve daha karmaşık hale getirin ve Google da bundan hoşlanmıyor (ve Google'ı memnun etmek istiyorsunuz , değil mi?). Bu eğitimde size onlardan nasıl kurtulacağınızı ve URL'lerinizi güzel ve okunabilir hale getireceğinizi göstereceğim.

Kullanım durumları

Peki bunun faydalı olabileceği senaryo nedir? Örneğimizde, tüm geliştiricilerimizi, becerilerini vurgulamak için kullanabilecekleri ilgili etiketleriyle birlikte listeleyen bir geliştiriciler sayfamız var. Bu yüzden şöyle bir yapı istedim (ve elde ettim):

  • /developers – geliştiricilerimizin sayfalandırılmış listesi
  • /developers/javascript – JavaScript konusunda uzmanlaşmış geliştiricilerimizin sayfalandırılmış listesi. Bu bir taksonomi görüşüdür.
  • /developers/tomaz-zaman – bir geliştirici özel gönderi türünün tek görünümü.

Son iki öğe arasındaki benzerliğe dikkat edin? WordPress'e geliştiricileri hem özel yazı tipimizde hem de özel taksonomimizde bir slug olarak kullanmasını söylemeliyiz.

Bir çözüm bulmaya çalıştıktan sonra, web yöneticisinin aslında bir tane olduğunun farkında olmadığına ve çoğunlukla WordPress'in varsayılan olarak onlara ne verdiğini kabul etmelerine oldukça şaşırdım.

Bunu düzeltelim.

Özel bir gönderi türü ve özel bir sınıflandırma kaydedin

Sınıflandırma URL'lerimizi yeniden yazmakla uğraşmadan önce, varlıklarımızı ayarlamamız gerekir (varsa, mevcut olanlarınızı kullanmaktan çekinmeyin). Uygulamamız gereken gerçek bir kullanım durumu olduğu için 'geliştirici' özel gönderi türünü kullanacağım:

 function register_developer_entities() { $developer_args = array( 'public' => true, 'label' => 'Developers', 'rewrite' => array( 'slug' => 'developers' ), 'taxonomies' => array( 'developer_tag' ) ); register_post_type( 'developer', $developer_args ); $taxonomy_args = array( 'labels' => array( 'name' => 'Developer Tags' ), 'show_ui' => true, 'show_tagcloud' => false, 'rewrite' => array( 'slug' => 'developers' ) ); register_taxonomy( 'developer_tag', array( 'developer' ), $taxonomy_args ); } add_action( 'init', 'register_developer_entities' );

Kod oldukça basittir ve gereksiz kısımların çoğunu (bu eğitimin amacı için) çıkardım. Yine de dikkat etmeniz gereken birkaç şey var:

  • CPT ve Taksonomiyi kaydettiğimiz sipariş. İkincisi en son gelir, aksi takdirde çalışmaz.
  • ikisi de aynı sümüklü böcek kullanıyor ( developers )
  • CPT, özel taxonomies doldurulmuş taksonomilere sahiptir ve bunun tersi, taksonomi, kayıt fonksiyonunun ikinci parametresi olarak CPT'ye sahiptir.

Bu noktada herhangi bir URL'yi ziyaret etmeye çalışırsanız, muhtemelen birine veya diğerine erişemezsiniz – 404 (sayfa bulunamadı) hatası alırsınız, çünkü özel URL yeniden yazmamızı henüz tanımlamadık. Bunun nedeni, aynı sümüklü böcek ile iki ayrı varlık tanımladığınız ve WordPress'in bununla nasıl başa çıkacağını bilmemesi, birinin diğerinin üzerine etkili bir şekilde yazması.

Yeniden yazma kuralları oluştur

Bu etkiyi tersine çevirmek için , özel terimlerimizin her birinin URL'sini yeniden yazma kurallarına manuel olarak eklememiz gerekir ve bu şekilde yapılır (kod parçacığının altındaki açıklama):

 function generate_taxonomy_rewrite_rules( $wp_rewrite ) { $rules = array(); $post_types = get_post_types( array( 'name' => 'developer', 'public' => true, '_builtin' => false ), 'objects' ); $taxonomies = get_taxonomies( array( 'name' => 'developer_tag', 'public' => true, '_builtin' => false ), 'objects' ); foreach ( $post_types as $post_type ) { $post_type_name = $post_type->name; // 'developer' $post_type_name = $post_type->name; // 'developer' $post_type_slug = $post_type->rewrite['slug']; // 'developers' $post_type_slug = $post_type->rewrite['slug']; // 'developers' foreach ( $taxonomies as $taxonomy ) { if ( $taxonomy->object_type[0] == $post_type_name ) { $terms = get_categories( array( 'type' => $post_type_name, 'taxonomy' => $taxonomy->name, 'hide_empty' => 0 ) ); foreach ( $terms as $term ) { $rules[$post_type_slug . '/' . $term->slug . '/? $rules[$post_type_slug . '/' . $term->slug . '/?

Burada neler olduğunu araştıralım: İlk önce özel kurallarımızı tutacak ve bir kez doldurulduktan sonra işlevin sonunda varsayılanlara eklediğimiz boş bir dizi oluşturuyoruz.

Ardından, özel gönderi türünü alırız ve bununla eşleşen taksonomiyi alırız, ancak bu işlev aynı zamanda istediğiniz kadar çift almayı da destekler, dolayısıyla dış for-döngüsü.

İçteki for döngüsü, sihrin gerçekleştiği yerdir; Onunla ilgili bir gönderi türü arasında bir eşleşme bulmak için tüm taksonomileri dolaşıyoruz. Bunu yaptıktan sonra, bu sınıflandırma için tüm terimleri alırız (bizim durumumuzda bu CSS , HTML , Gravity Forms , WooCommerce , vb. olacaktır) ve her terim için yeni bir yeniden yazma kuralı oluştururuz, böylece bizim durumumuzda /developers/css index.php?developer_tag=css olur ve WordPress URL'mizi doğru şekilde çözer.

Şablon dosyaları ne olacak?

Aynı URL yapısı altında iki farklı varlık görüntülediğimiz için, WordPress'in bunları doğru bir şekilde oluşturduğundan emin olmamız gerekiyor; Her ikisinin de aynı bilgi setini görüntülemesi gerekir (taksonomi bir anlamda sadece bir filtredir ), bu nedenle yeni bir şablon dosyası oluşturmanız gerekir, örneğimiz taxonomy-developer_tag.php olacak ve aşağıdaki içeriği içine koyacaksınız. :

 <?php // Find and load the archive template. locate_template( 'archive-developer.php', true );

Yalnızca geliştirici arşiv şablon dosyamızı bulur ve bunu belirli bir terimle eşleşen tüm geliştiricileri görüntülemek için kullanır.


İşte bu, artık çok daha kullanıcı dostu özel sınıflandırma URL'lerine sahip olmalısınız!

Burada neler olduğunu araştıralım: İlk önce özel kurallarımızı tutacak ve bir kez doldurulduktan sonra işlevin sonunda varsayılanlara eklediğimiz boş bir dizi oluşturuyoruz.

Ardından, özel gönderi türünü alırız ve bununla eşleşen taksonomiyi alırız, ancak bu işlev aynı zamanda istediğiniz kadar çift almayı da destekler, dolayısıyla dış for-döngüsü.

İçteki for döngüsü, sihrin gerçekleştiği yerdir; Onunla ilgili bir gönderi türü arasında bir eşleşme bulmak için tüm taksonomileri dolaşıyoruz. Bunu yaptıktan sonra, bu sınıflandırma için tüm terimleri alırız (bizim durumumuzda bu CSS , HTML , Gravity Forms , WooCommerce , vb. olacaktır) ve her terim için yeni bir yeniden yazma kuralı oluştururuz, böylece bizim durumumuzda /developers/css index.php?developer_tag=css olur ve WordPress URL'mizi doğru şekilde çözer.

Şablon dosyaları ne olacak?

Aynı URL yapısı altında iki farklı varlık görüntülediğimiz için, WordPress'in bunları doğru bir şekilde oluşturduğundan emin olmamız gerekiyor; Her ikisinin de aynı bilgi setini görüntülemesi gerekir (taksonomi bir anlamda sadece bir filtredir ), bu nedenle yeni bir şablon dosyası oluşturmanız gerekir, örneğimiz taxonomy-developer_tag.php olacak ve aşağıdaki içeriği içine koyacaksınız. :


Yalnızca geliştirici arşiv şablon dosyamızı bulur ve bunu belirli bir terimle eşleşen tüm geliştiricileri görüntülemek için kullanır.


İşte bu, artık çok daha kullanıcı dostu özel sınıflandırma URL'lerine sahip olmalısınız!

Copyright statement: Unless otherwise noted, this article is Collected from the Internet, please keep the source of the article when reprinting.

Check Also

Divi's Theme Builder ile Özel Global Başlık Nasıl Oluşturulur

Artık Tema Oluşturucu burada olduğuna göre, web sitenizi A'dan Z'ye kurmanıza yardımcı olacak yeni eğitimlere dalmak için sabırsızlanıyoruz. Buna Divi'nin yerleşik seçeneğini kullanarak özel başlıklar oluşturma da dahildir. Bu eğitimde Divi's Theme Builder'ı kullanarak global bir başlık oluşturmaya odaklanacağız. Bu sayfaya veya gönderiye farklı bir başlık atamadıysanız, web sitenizin her yerinde genel bir başlık görünecektir.

Bir Cevap Yazın

E-posta hesabınız yayımlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir