Ö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
taxonomiesdoldurulmuş 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!
ev borcu WordPress sitesi