Bukankah ini seharusnya mudah ?! Jenis pos khusus / permalink taksonomi khusus

11

Jadi ini membuatku benar-benar gila. Saya telah menghabiskan waktu berhari-hari untuk memperbaiki ini dan saya tidak dapat menemukan mengapa hal ini sangat sulit karena pastinya ini adalah struktur permalink yang sangat umum!

Saya melihat melalui ratusan jawaban dan posting dan sepertinya tidak ada yang menyelesaikan masalah.

Saya hanya ingin struktur ini:

mysite.com/custom-post-type/custom-taxonomy-term/post-name

Jadi saya mencapai yang berikut:

mysite.com/literature - all literature posts
mysite.com/literature/fiction - all literature posts with 'fiction' term
mysite.com/literature/fiction/mybook - the post

Setiap kali saya mencoba sesuatu, saya mendapatkan 404 kesalahan atau kesalahan itu tidak berhasil.

Saya tidak mengerti mengapa ini sangat sulit!

Bantuan apa pun sangat dihargai!

Terima kasih

================================================== ==== ================== INFORMASI TAMBAHAN ==================

Saat ini saya sedang mendaftarkan jenis tulisan dan taksonomi sebagai berikut:

register_post_type('literature',$args);
'rewrite' => array('slug' => 'literature/books','with_front' => false),

register_taxonomy('literature_category',array('literature'), array(
'rewrite' => array( 'slug' => 'literature','with_front' => false ),

Jika saya mendaftarkan keduanya sebagai 'literatur' saya mendapatkan 404 di halaman mysite.com/literature tetapi ini menampilkan permalink saya sebagai: mysite.com/literature/books/mybook

Setelah mengikuti saran tentang pertanyaan ini - Jenis pos kustom, taksonomi, dan tautan permanen

Saya telah menambahkan ini ke fungsi saya:

function filter_post_type_link($link, $post) {
    if ($post->post_type != 'literature')
        return $link;

    if ($cats = get_the_terms($post->ID, 'literature_category'))
        $link = str_replace('%literature_category%', array_pop($cats)->slug, $link);
    return $link;
}
add_filter('post_type_link', 'filter_post_type_link', 10, 2);

Dan mengubah jenis posting saya menjadi 'slug' => 'literature/%literature_category%' Dan mengubah taksonomi saya menjadi'slug' => 'literature'

Ini berfungsi baik kecuali bahwa pada mysite.com/literaturepagination tidak berfungsi, jadi saya mendapatkan kesalahan 404 pada url berikut:

mysite.com/literature/page/2/

masa depan
sumber
Karena penasaran, apa yang sudah Anda coba sejauh ini?
Matthew Boynes
Jawaban ini membuat saya paling dekat - wordpress.stackexchange.com/questions/5308/... - tapi kemudian tidak bekerja dengan pagination dan plugin yang disarankan tidak berfungsi baik
fxfuture
Keren, senang saya bertanya, itu menyelamatkan saya waktu!
Matthew Boynes

Jawaban:

6

Ikuti saran pada pertanyaan ini seperti yang sudah Anda lakukan, tetapi tambahkan ini ke kode Anda:

add_action( 'generate_rewrite_rules', 'fix_literature_category_pagination' );
function fix_literature_category_pagination( $wp_rewrite ) {
    unset($wp_rewrite->rules['literature/([^/]+)/page/?([0-9]{1,})/?$']);
    $wp_rewrite->rules = array(
        'literature/?$' => $wp_rewrite->index . '?post_type=literature',
        'literature/page/?([0-9]{1,})/?$' => $wp_rewrite->index . '?post_type=literature&paged=' . $wp_rewrite->preg_index( 1 ),
        'literature/([^/]+)/page/?([0-9]{1,})/?$' => $wp_rewrite->index . '?literature_category=' . $wp_rewrite->preg_index( 1 ) . '&paged=' . $wp_rewrite->preg_index( 2 ),
    ) + $wp_rewrite->rules;
}

Terakhir, buka Pengaturan> Permalinks dan tekan simpan. Jika masih tidak berhasil, simpan permalink Anda lagi. Terkadang saya merasa Anda harus menyelamatkan mereka dua kali, tetapi siapa yang tahu. Ngomong-ngomong, Beri tahu saya bagaimana Anda keluar. Perhatikan bahwa Jawaban Standar Ilmu Komputer # 1 berlaku: Ini Berhasil Untuk Saya ... ;-)

Dari tanah TMI ...

Sebagai referensi, alasan mengapa halaman tidak bekerja secara default adalah karena WordPress membuat aturan penulisan ulang untuk literatur /% literature_category% /% book% /% page%, yang masuk akal jika Anda memikirkannya. Jadi permalink default Anda memiliki aturan bersaing ini dalam urutan ini:

[literature/([^/]+)/([^/]+)(/[0-9]+)?/?$] => index.php?literature_category=$matches[1]&book=$matches[2]&page=$matches[3]
[literature/([^/]+)/page/?([0-9]{1,})/?$] => index.php?literature_category=$matches[1]&paged=$matches[2]

Yang benar-benar kami lakukan di sini adalah mengubah urutan ini dengan membatalkan pengaturan yang terakhir (kami dapat menyimpannya, tetapi kemudian setiap penulisan ulang sesudahnya memiliki satu regex lagi untuk dijalankan pada pemuatan halaman) dan menambahkannya ke awal array.

Fakta menyenangkan: Jika Anda pernah memiliki "buku" berjudul "halaman" dan memiliki banyak halaman, pesanan ini akan bertentangan dan halaman berikutnya tidak akan berfungsi!

Matthew Boynes
sumber
Astaga, terpikir oleh saya bahwa sintaks saya salah di sini. Cukup lucu, itu bekerja untuk saya dan ketika saya memperbaikinya, itu tidak berhasil. Saya akan terus melakukannya dan memperbarui jawaban saya ketika saya menemukannya ...
Matthew Boynes
Terima kasih atas bantuan Anda, Matthew. Saya mencobanya dan sayangnya itu tidak berhasil. Saya telah menambahkan lebih banyak informasi ke pertanyaan saya yang semoga menjelaskannya dengan lebih baik!
fxfuture
1
Ok, saya minta maaf atas kebingungan. Punya sedikit gas otak di sana (pasti punya kacang otak baru-baru ini). Jawaban saya telah diperbarui, dan kembali berfungsi untuk saya. Ingatlah untuk menyimpan lebih dari permalink Anda.
Matthew Boynes
1
Oh ok, saya melihat pertanyaan Anda yang diperbarui. Jadi bukankah itu / sastra / fiksi / halaman / 2 tidak bekerja, itu bahwa / sastra / halaman / 2 tidak bekerja, apakah itu benar? Jika demikian, itu adalah perbaikan yang mudah, kami akan melakukan hal yang sama di tingkat atas
Matthew Boynes
1
mari kita lanjutkan diskusi ini dalam obrolan
Matthew Boynes