Mengatasi konflik jenis nama kiriman khusus vs konflik permalink halaman (siput yang sama)

19

Saya memiliki jenis posting khusus yang disebut "visningshus", dan juga Halaman dengan siput itu. Ini sebagaimana mestinya (harus).

Saat ini, " http://my-site.com/visningshus " daftar semua posting dari jenis itu. Saya ingin menunjukkan halaman yang memiliki permalink siput itu.

Bagaimana saya bisa membuat Wordpress tidak membuat nama jenis posting didahulukan, tetapi permalink, dan perlihatkan Halaman?

Henrik Erlandsson
sumber

Jawaban:

33

Cara termudah adalah dengan menonaktifkan halaman arsip untuk CPT ini:

register_post_type( 'visningshus',
    array(
        [...]
        'has_archive' => false,
        [...]
    )
);

Jangan lupa untuk menyegarkan kembali permalink Anda di "Pengaturan> Permalinks"

pembuat kraftner
sumber
1
Bekerja dengan sempurna - tetapi sekarang semua permalink yang dimulai dengan nama jenis pos kustom memberikan 404, meskipun itu benar di wp-admin dan sepertinya tidak ada penulisan ulang yang terjadi. Dengan kata lain, semua tautan permanen benar di situs, tetapi semua pos kustom memberikan 404. Bisakah Anda membantu dengan itu? :)
Henrik Erlandsson
@HenrikErlandsson Mungkin jenis posting Anda memiliki nama halaman yang sama. Dalam hal ini saya sarankan Anda untuk mengubah nama jenis posting Anda. Contoh: Nama jenis pos kustom - Sebelum: produk Setelah: cpt_products.
Bruno Monteiro
Sangat pintar. Memecahkan banyak masalah
bysanchy
8

Saya tidak memiliki reputasi yang cukup tinggi untuk mengomentari kiriman @ Carl, tetapi jawabannya adalah yang benar (setidaknya untuk situasi ini, menjaga kekosongan halaman dan tipe kiriman kustom tetap sama dan tidak menggunakan file archive.php)

Tetapi jawabannya akan memberikan kesalahan dengan pagination. Untuk menghindari kesalahan pagination:

add_rewrite_rule('^visningshus/page/([0-9]+)','index.php?pagename=visningshus&paged=$matches[1]', 'top');

Ini terlihat pada pagination, meraih nomor halaman, dan kemudian di sisi lain memaksanya untuk menggunakan halaman dengan siput yang cocok, dan kemudian menyisipkan variabel halaman.

Ini selain untuk 'has_archive' => false,diposting di atas harus mencapai fungsi yang diinginkan.

Seperti yang dinyatakan orang lain, pastikan untuk menyiram aturan penulisan ulang dengan mengunjungi Pengaturan> Permalinks setelah melakukan perubahan ini.

Semoga ini bisa membantu seseorang, karena saya tahu ini membuat saya bingung untuk waktu yang sangat lama.

Andrew Herder
sumber
4

Tjena Henrik!

Saya pikir semua yang perlu Anda lakukan adalah menambahkan aturan penulisan ulang ke aturan penulisan ulang Wordpress yang telah dibuat. Tambahkan potongan kode ini ke functions.php dari tema Anda atau sertakan sebagai pugin terpisah ...

add_action('init', function () {
     add_rewrite_rule('visningshus/?$','index.php?pagename=visningshus', 'top');
     flush_rewrite_rules();
}, 1000);
Carl
sumber
4
Jika ada yang menggunakan ini, hapus flush_rewrite_rules();Anda tidak harus mengubah aturan penulisan ulang initsetiap saat. Muat ulang satu kali lalu hapus, atau bilas permalink secara manual dengan membuka pengaturan permalink di dasbor admin dan klik "Simpan Perubahan"
tehlivi
0

Saya menyelesaikannya tanpa menyelesaikan konflik. Buat halaman dengan slug visningshus dan tulis apa pun yang Anda inginkan di dalamnya. Perhatikan ID halaman ini.

Buat dan sesuaikan templat arsip-custom-post-type.php dengan cara apa pun yang Anda suka (kemungkinan besar Anda hanya akan menggunakan templat halaman) tetapi ganti bagian loop dengan

$recent = new WP_Query("page_id=your-page-id");  
while($recent->have_posts()) : $recent->the_post();
    the_content();
endwhile;

Kemudian ketika Anda akan pergi ke http://my-site.com/visningshus Anda akan melihat konten yang dikelola oleh halaman di url yang benar.

Biarkan saya tahu itu berfungsi.

molokom
sumber
Ide bagus, tapi ini terlalu rumit. Apakah Anda mencoba solusi saya?
kraftner
@ perencana tidak, saya tidak. Saya akan mencobanya lain kali. Terima kasih!
molokom
Ini juga memiliki beberapa efek samping seperti header dan semuanya masih dibuat seolah-olah itu adalah halaman arsip dan bukan halaman. Saya tidak akan menyarankan untuk menggunakan solusi itu.
kraftner
Bagaimana jika ID halaman berubah? Ini tidak aman.
Joel James
0

Tidak boleh memilih, tetapi + untuk solusi Carls, register_post_type seharusnya

'has_archive' => false

Sederhana. Namun, ketika Anda menghadapi masalah pagination, lihatlah

add_rewrite_rule
Vitali Protosovitski
sumber
0

Apa yang diperbaiki untuk saya adalah mengatur arsip sebagai false tetapi juga mengatur Hierarchical ke false ketika mengatur jenis posting kustom saya!

Adrian Sticea
sumber
0

Berikut ini adalah solusi umum untuk memprioritaskan pagination daripada konten jenis posting khusus untuk slug jenis posting kustom apa pun.

// prioritize pagination over displaying custom post type content
add_action('init', function() {
  add_rewrite_rule(
    '(.?.+?)/page/?([0-9]{1,})/?$',
    'index.php?pagename=$matches[1]&paged=$matches[2]',
    'top'
  );
});

Selain menambahkan potongan ini, Anda juga harus memastikan bahwa jenis pos khusus Anda sudah archive = false

dan yang terakhir, buka halaman pengaturan Permalinks Pengaturan> Permalinks (/wp/wp-admin/options-permalink.php) dan simpan pengaturan saat ini untuk menyegarkan struktur tautan pada halaman.

jmarceli
sumber