Permalinks: jenis kiriman khusus -> taksonomi khusus -> kiriman


39

Saya mengalami kesulitan bekerja dengan aturan penulisan ulang WordPress, dan dapat menggunakan bantuan.

Saya memiliki jenis posting khusus yang disebut _shows_.

Semua acara memiliki kategori taksonomi tunggal tunggal _show-category_.A _show_tidak akan pernah memiliki lebih dari satu _show-category_.

Saya ingin url saya merutekan dengan cara ini:

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

Jadi sebagai contoh dunia nyata, katakanlah kita memiliki _show-category_"Foo" dan _show_posting berjudul "Bar" yang memiliki "Foo" seperti itu _show-category_. Saya berharap aplikasi WordPress saya terlihat seperti ini:

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

Saya mencoba menghindari plugin jika memungkinkan, tetapi saya terbuka untuk solusi apa pun.


1
hanya mengarahkan Anda ke sesuatu yang harus saya lakukan sebelumnya .. wordpress.stackexchange.com/questions/102246/…
reikyoushin

Jawaban:


70

Pertama, daftarkan taksonomi Anda dan tentukan slugargumen rewriteuntuk shows:

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

Selanjutnya, daftarkan jenis posting Anda dan atur siput ke shows/%show_category%, dan atur has_archiveargumen ke shows:

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

Terakhir, tambahkan filter post_type_linkuntuk menggantikan kategori acara di permalinks acara individual:

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 );

EDIT

Lupa has_archiveargumen di register_post_typeatas, itu harus diatur ke shows.


1
Milo, terima kasih! Filter post_type_link adalah bagian yang hilang untuk saya. Siapa pun yang membaca utas ini dengan masalah yang sama, satu-satunya hal yang perlu diperhatikan adalah ada kesalahan kecil pada fungsi wpa_show_permalinks, di mana $ post-> post_type == 'show' sebenarnya harus 'shows'. Terima kasih lagi Milo!
Paul T

4
Jika Anda membuat perubahan ke instance WordPress yang ada, pastikan Anda pergi ke Pengaturan> Permalinks dan klik simpan. Perubahan yang Anda buat di functions.php tidak akan berlaku hingga Anda melakukannya.
Jay Neely

2
Ini hampir berhasil bagi saya karena taksonomi ditampilkan pada halaman jenis posting, / post_type / taxonomy / adalah halaman yang sah (sebelumnya 404) tetapi / post_type / taksonomi / postingan saya adalah 404'ing. Saya perhatikan ketika mendaftarkan taksonomi di atas "show_category", "show" sedang didaftarkan, meskipun hanya show_category yang merupakan taksonomi. Saya hanya mendaftarkan taksonomi.
justinavery

4
@ Moo cara apa saja untuk membuatnya bekerja dengan sub pajak seperti pertunjukkan / pajak / subtax / posting?
Benn

2
Saya sangat berharap ini akan bekerja untuk saya juga tetapi setiap tunggal berakhir pada 404 ....
Beee
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.