Konflik Siput Jenis Tulisan / Halaman Slug Kustom - Mencegah penggunaan siput yang disimpan di halaman, simpan?

13

Saya memiliki jenis portofolio pos kustom (slug portfolio) dalam tema saya dan semua berfungsi dengan baik kecuali satu hal. Ketika orang membuat halaman dengan slug portofolio, misalnya: example.com/portfolio, tema tersebut mengira saya ingin menggunakan halaman arsip jenis posting khusus, bukan halaman saya yang dibuat di editor.

Dapatkah saya entah bagaimana "memesan" portofolio slug ketika halaman disimpan untuk memastikan itu tidak pernah digunakan, mungkin diubah namanya menjadi portofolio-halaman?

Proyek saya menggunakan metode yang dijelaskan dalam tutorial ini, inilah konflik yang saya maksud:

"Selain harus menambal kode, ada satu tangkapan lain di sini yaitu Anda tidak dapat memanggil siput Halaman Anda dengan hal yang sama dengan siput jenis pos kustom. Pikirkan siput jenis pos kustom sebagai kata kunci yang dipesan; namun, Anda dapat membuat judul Halaman Anda nama yang sama dengan siput tipe posting kustom Anda asalkan siput Halaman Anda adalah sesuatu yang berbeda. " - http://wp.tutsplus.com/tutorials/custom-post-type-pagination-chaining-method/

Terima kasih atas sarannya!

hhins
sumber
Satu opsi yang saya lihat adalah menghapus ini dari register_post_type () init: 'rewrite' => array ('slug' => 'portfolio', 'with_front' => true), dan cukup atur 'rewrite' => false dan hanya tinggal dengan item portofolio "tunggal" yang jelek.
hhins
Pilih pertanyaan Anda karena saya ingin tahu jawabannya! Saya telah bekerja dengan posting khusus untuk beberapa kali, tetapi saya tidak pernah memperhatikan ini, dan sekarang setelah membaca pertanyaan Anda, saya mencobanya. Anda benar, WordPress memang bingung di sini!
Rutwick Gangurde

Jawaban:

13

2 filter berikut memungkinkan Anda untuk terhubung ketika WordPress memeriksa siput dan ditemukan di fungsi wp_unique_post_slug () di file wp-include / post.php.

Ada 2 filter, satu untuk posting hierarkis dan satu untuk non-hierarkis. Filter hierarki menyediakan ID untuk induk postingan sehingga jika $ post_parent adalah 0, Anda tahu ini adalah postingan "base".

Filter juga meneruskan $ post_type jika Anda ingin menambahkan jenis posting tertentu ke logika Anda.

Dengan mengembalikan "true", Anda memberi tahu WordPress bahwa siput ini buruk sehingga WordPress menambahkan akhiran, sama seperti yang akan dilakukan jika Anda mencoba memberi kami nama pos / siput yang sudah diambil.

add_filter( 'wp_unique_post_slug_is_bad_hierarchical_slug', 'portfolio_is_bad_hierarchical_slug', 10, 4 );
function portfolio_is_bad_hierarchical_slug( $is_bad_hierarchical_slug, $slug, $post_type, $post_parent ) {
    if ( !$post_parent && $slug == 'portfolio' )
        return true;
    return $is_bad_hierarchical_slug;
}

add_filter( 'wp_unique_post_slug_is_bad_flat_slug', 'portfolio_is_bad_flat_slug', 10, 3 );
function portfolio_is_bad_flat_slug( $is_bad_flat_slug, $slug, $post_type ) {
    if ( $slug == 'portfolio' )
        return true;
    return $is_bad_flat_slug;
}
Rachel Carden
sumber
Untuk beberapa alasan saya masih menghadapi masalah yang sama
Tan-007
1

Buat halaman dengan slug 'portofolio' dan jadikan 'Privat'. Ini akan disembunyikan dari publik ketika memesan siput dari penggunaan lebih lanjut.

Max Yudin
sumber
1

Datang persis masalah ini ketika menyelidiki masalah pagination. Kami memiliki beranda Berita (slug "news") dan pagination gagal ... upaya untuk sampai ke / news / halaman / 2 / selalu menghasilkan '404 - Tidak Ditemukan'.

Masalahnya ternyata jenis berita kustom kami juga telah diberi siput "berita". Dengan mengubah yang terakhir (misalnya menjadi "news_archive") masalahnya telah diperbaiki. Ini membuat referensi URL berita asli tidak berubah. Mengubah siput beranda Berita juga berhasil, tetapi kemudian semua URL akan memasukkan siput yang diubah.

Ross
sumber