Permalinks: özel gönderi türü -> özel taksonomi -> gönderi


38

WordPress yeniden yazma kuralları ile çalışma konusunda sorun yaşıyorum ve biraz yardım alabilirim.

Özel bir yazı tipim var _shows_.

Tüm şovların tek bir özel taksonomi kategorisi vardır, _show-category_.A _show_hiçbir zaman birden fazla olmayacaktır _show-category_.

URL'lerin bu şekilde yönlendirilmesini istiyorum:

www.mysite.com/shows/  =>  archive-shows.php

www.mysite.com/shows/%category%/ => taxonomy-show-category.php

www.mysite.com/shows/%category%/%postname%/ => single-shows.php

Dolayısıyla gerçek bir dünya örneği olarak, bir _show-category_"Foo" ve "Foo" _show_olan bir "Bar" yazısının olduğunu söyleyelim _show-category_. WordPress uygulamamın şöyle görünmesini beklerdim:

www.mysite.com/shows/foo/ => shows all posts under the foo category
www.mysite.com/shows/foo/bar => shows the indivual post

Mümkün olduğunda eklentilerden kaçınmaya çalışıyorum, ancak herhangi bir çözüme açığım.


1
sadece daha önce yapmam gereken bir şeyi işaret ediyorum .. wordpress.stackexchange.com/questions/102246/…
reikyoushin

Yanıtlar:


70

Öncelikle, sizin sınıflandırmasını kayıt ve set slugdayankları rewriteiçin shows:

register_taxonomy(
    'show_category',
    'show',
    array(
        'rewrite' => array( 'slug' => 'shows', 'with_front' => false ),
        // your other args...
    )
);

Ardından, yazı türünüzü kaydedin ve sümüklü böcek olarak shows/%show_category%ayarlayın ve has_archiveargümanı şuraya ayarlayın shows:

register_post_type(
    'show',
    array(
        'rewrite' => array( 'slug' => 'shows/%show_category%', 'with_front' => false ),
        'has_archive' => 'shows',
        // your other args...
    )
);

Son post_type_linkolarak, show kategorisini ayrı show permalink'lerin yerine koymak için bir filtre ekleyin :

function wpa_show_permalinks( $post_link, $post ){
    if ( is_object( $post ) && $post->post_type == 'show' ){
        $terms = wp_get_object_terms( $post->ID, 'show_category' );
        if( $terms ){
            return str_replace( '%show_category%' , $terms[0]->slug , $post_link );
        }
    }
    return $post_link;
}
add_filter( 'post_type_link', 'wpa_show_permalinks', 1, 2 );

DÜZENLE

Ayarlanması gereken yukarıdaki has_archiveargümanı unuttum .register_post_typeshows


1
Milo, teşekkür ederim! Post_type_link filtresi benim için eksikti. Bu konuyu aynı sorunla okuyan herkes, notun tek şey, $ post-> post_type == 'show' 'aslında' gösterilmesi gereken 'wpa_show_permalinks işlevinde küçük bir hata olması. Tekrar teşekkürler Milo!
Paul T

1
@milo, wordpress.stackexchange.com/questions/199456/… adresinden gelen 404bu yaklaşıma devam ettim . Permalink yapım şu,%category%/%postname%
Atticus

4
Varolan bir WordPress örneğinde değişiklik yapıyorsanız, Ayarlar> Permalinks bölümüne gidip kaydet düğmesine tıklayın. Functions.php dosyasında yaptığınız değişiklikler siz yapana kadar etkili olmayacak.
Jay Neely

2
Bu neredeyse benim için çalışıyordu, taksonominin yazı tipi sayfasında görüntülenmesi, / post_type / taxonomy / yasal bir sayfa (daha önce 404), ancak / post_type / taxonomy / post benim 404''dür. "Show_category", "show" üstündeki taksonomiyi kaydederken, sadece show_category taksonomi olmasına rağmen kaydedildiğini fark ettim. Ben sadece taksonomiyi kaydediyorum.
justinavery

4
@Milo, show / tax / subtax / post gibi alt alt vergilerle çalışmanın bir yolu var mı?
Benn
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.