Pembaruan 2016-01-21
Semua pengujian saat ini di pihak saya sedang dilakukan pada pemasangan baru 4.4.1 dengan pengaturan berikut:
Plain permalinks
Twentysixteen Theme
No plugins activated
Jika kiriman hanya memiliki 1 halaman (yaitu <!--nextpage-->
tidak muncul di kiriman) maka halaman tambahan ditambahkan dengan sukses (bahkan jika Anda menambahkan beberapa halaman tambahan¹).
Welcome to WordPress. This is your first post. Edit or delete it, then start writing!
Jika posting memiliki 2+ halaman maka halaman tambahan 404 dan redirect kanonik ke halaman 1 dari postingan.
Welcome to WordPress. This is your first post. Edit or delete it, then start writing!
<!--nextpage-->
This is page 2
Dalam kasus kedua $wp_query->queried_object
kosong setelah Anda menekan halaman tambahan. Anda harus menonaktifkan pengalihan kanonik untuk melihatnyaremove_filter('template_redirect', 'redirect_canonical');
Kedua perbaikan inti berikut telah dicoba, secara terpisah dan bersama-sama, tanpa perubahan perilaku: https://core.trac.wordpress.org/ticket/35344#comment:16
https://core.trac.wordpress.org/ticket/35344#comment:34
Untuk kemudahan penggunaan, ini adalah kode yang saat ini saya uji dengan:
add_action('template_redirect', 'custom_content_one');
function custom_content_one() {
global $post;
$content = "\n<!--nextpage-->\nThis is the extra page v1";
$post->post_content .= $content;
}
add_filter('content_pagination', 'custom_content_two', 10, 2);
function custom_content_two($pages, $post) {
if ( in_the_loop() && 'post' === $post->post_type ) {
$content = "This is the extra page v2";
$pages[] = $content;
}
return $pages;
}
add_action('the_post', 'custom_content_three');
function custom_content_three() {
global $multipage, $numpages, $pages;
$content = "This is the extra page v3";
$multipage = 1;
$numpages++;
$pages[] = $content;
}
¹Ini adalah kode yang saya gunakan untuk menguji beberapa halaman tambahan pada posting halaman tunggal
add_action('template_redirect', 'custom_content_one');
function custom_content_one() {
global $post;
$content = "\n<!--nextpage-->\nThis is the extra page v1-1\n<!--nextpage-->\nThis is the extra page v1-2\n<!--nextpage-->\nThis is the extra page v1-3";
$post->post_content .= $content;
}
Pertanyaan Asli
Sebelum 4.4 saya dapat menambahkan halaman tambahan ke posting mutlipage dengan yang berikut:
add_action('template_redirect', 'custom_content');
function custom_content() {
global $post;
$content = html_entity_decode(stripslashes(get_option('custom_content')));
$post->post_content .= $content;
}
Dengan get_option ('custom_content') menjadi sesuatu seperti:
<!--nextpage-->
Hello World
Sejak memutakhirkan ke 4.4 kode tidak berfungsi; menavigasi ke halaman tambahan memicu kesalahan 404 dan redirect_canonical mengirimkannya kembali ke permalink kiriman. Menonaktifkan redirect_canonical memungkinkan saya untuk melihat halaman tambahan dan konten tambahan ada di sana, tetapi masih memicu kesalahan 404.
Saya sudah mencoba sejumlah solusi, tidak ada yang menyelesaikan kesalahan 404, termasuk:
add_action('the_post', 'custom_content');
function custom_content() {
global $multipage, $numpages, $pages;
$content = html_entity_decode(stripslashes(get_option('custom_content')));
$multipage = 1; // ensure post is considered multipage: needed for single page posts
$numpages++; // increment number of pages
$pages[] = $content;
}
Juga mencoba memanfaatkan filter content_pagination baru yang ditambahkan pada 4.4:
add_filter('content_pagination', 'custom_content', 10, 2);
function custom_content($pages, $post) {
$content = html_entity_decode(stripslashes(get_option('custom_content')));
$pages[] = $content;
return $pages;
}
Pada titik ini saya kehabisan ide tentang cara mengembalikan fungsi ini dan bantuan apa pun akan dihargai.
Jawaban:
UPDATE 21-01-2016 19:35 SA SAE - BUG DITEMUKAN !!!!! YA!!!!!!
Saya akhirnya menemukan bug. Seperti yang Anda nyatakan dalam pembaruan terakhir Anda, kegagalan hanya terjadi ketika
$post_content
memiliki<!--nextpage-->
tag di konten. Saya mengujinya, dan memang mengkonfirmasi bahwa halaman lain setelah halaman setelah<!--nextpage-->
mengembalikan 404 dan kemudian halaman mendapat pengalihan kembali ke halaman pertama.Ini disebabkan oleh baris kode berikut dalam
handle_404()
metode yang diperkenalkan diWP
kelas di WordPress 4.4Apa yang dilakukan kode ini adalah, setiap kali
<!--nextpage-->
tag diset padapost_content
, ia akan mengembalikan 404 ketika setiap halaman diakses yang ditambahkan setelah konten melaluicontent_pagination
filter. Karena pengaturan 404,redirect_canonical()
pengalihan halaman yang ditambahkan kembali ke halaman pertamaSaya telah mengajukan tiket trac tentang masalah ini yang dapat Anda periksa di sini
Pada saat penulisan, belum ada umpan balik, jadi pastikan untuk secara teratur memeriksa status tiket
SOLUSI SAAT INI - KOMENTAR TIKET TRAC A / W
Untuk saat ini, sampai kami mendapatkan umpan balik dan kemungkinan perbaikan di rilis mendatang, cukup hapus baris-baris itu dari
WP
kelas hingga pemberitahuan lebih lanjutWAKTU APA ITU ...... WAKTU MENGERJAKAN !!!!!
Saya punya waktu untuk sepenuhnya menguji ini. Saya mengambil kode Anda dan mengujinya pada:
Instalasi lokal v4.3 saya
Instal lokal v4.4.0 saya
Instalasi lokal v4.4.1 saya
Selesaikan pemasangan lokal baru v4.4.1 dengan hanya
Hello World
pos danSample Page
halamandengan permalinks saya disetel ke
default
danPost Name
Berikut ini adalah kode pengujian saya untuk membuat 4 halaman dengan di dalam pos pengujian saya.
Saya juga diuji
untuk ukuran baik
Pada setiap instalasi dan permalink struktur, semua kode Anda berfungsi ( kecuali
content_pagination
pada v4.3 yang diharapkan ).Saya juga menetapkan
Sample Page
sebagai halaman depan statis, tetapi gagal pada halaman 2 sebagai penyesuaian dengan bug seperti yang dijelaskan dalam JAWABAN ASLI dan ** EDITJadi kesimpulannya adalah bahwa ini tidak ada hubungannya dengan bug di core atau bug lain di core. Dari komentar, ada sesuatu yang tidak disetel pada objek yang diminta pada halaman posting paged, dan itu adalah sesuatu yang perlu kita debug. Sayangnya karena masalah ini sekarang dilokalkan, saya tidak dapat memberikan solusi yang tepat.
MENGGAMBARKAN MASALAH
Anda perlu menggunakan alur karya berikut untuk men-debug masalah
Dapatkan sendiri kopi kafein tinggi dalam jumlah besar dengan banyak gula
Ambil cadangan Anda db
Unduh dan pasang plugin berikut ( Saya tidak memiliki afiliasi dengan plugin apa pun )
Objek debug untuk debugging normal. Setelah terinstal dan diseting, perbaiki semua bug jelas yang mungkin disorot oleh plugin. Jangan terus ke poin utama berikutnya jika Anda memiliki bug yang jelas. Perbaiki dulu
DB Manager yang akan Anda gunakan untuk memperbaiki dan membersihkan DB Anda sebelum Anda melanjutkan ke poin-poin berikutnya
Hapus semua cache, browser, dan plugin
Nonaktifkan semua plugin dan kosongkan semua cache lagi untuk ukuran yang baik. Karena masalah ini terlihat seperti masalah pengalihan, saya mungkin akan menonaktifkan semua plugin yang mungkin ada hubungannya dengan pengalihan. Mungkin satu plugin belum kompatibel dengan v4.4. Periksa apakah masalah tetap ada, jika benar, lanjutkan ke poin selanjutnya, mari kita lihat lebih detail
Mulailah dengan menonaktifkan semua plugin, Anda juga dapat memulai dengan hanya menonaktifkan plugin yang mungkin jelas menyebabkan masalah. Uji dengan benar instal Anda setelah aktivasi masing-masing dan setiap plugin. Plugin pertama yang diaktifkan yang menyebabkan masalah adalah pelakunya. Jika demikian, hubungi pembuat plugin dengan detail debugging. Pastikan untuk menghapus cache Anda setelah setiap aktivasi plugin hanya untuk ukuran yang baik
Jika Anda mencapai titik ini, titik peluru sebelumnya tidak menyelesaikan masalah Anda. Langkah selanjutnya adalah beralih ke tema yang dibundel untuk menghilangkan tema Anda sebagai masalah. Sekali lagi, bersihkan cache.
Jika semuanya gagal, Anda memiliki dua opsi lagi
Hapus
.htaccess
dan biarkan WordPress membuat yang baruInstal ulang WordPress
Ini harus menyelesaikan masalah Anda. Jika tidak, Anda harus mempertimbangkan bug di inti WordPress yang mungkin menyebabkan masalah.
Saya harap ini membantu dalam menangkap bug
MEMPERBARUI
Seharusnya saya benar-benar terhubung dengan tiket trac yang mengikuti yang tampaknya menjelaskan semuanya lebih detail
Tambalan yang menarik dan cukup relevan dari tiket trac di atas
https://core.trac.wordpress.org/ticket/35344#comment:16
https://core.trac.wordpress.org/ticket/35344#comment:34
Saya tidak dapat menguji secara konkret hal seperti itu pada saat ini, tetapi Anda harus bekerja melalui patch yang disarankan dan mengujinya. Apa yang dapat saya ambil adalah bahwa kode yang sama
redirect_canonical()
yang bertanggung jawab untuk pagination halaman depan statis juga bertanggung jawab untuk pagination pada halaman tunggal.JAWABAN ASLI
Satu halaman ( seperti halaman depan statis ) digunakan
get_query_var( 'page' )
untuk paginasi. Dengan WordPress 4.4 ( dan di v4.4.1 ), muncul bug yang menyebabkan masalah dengan pagination saat digunakanget_query_var( 'page' )
untuk pagination.Laporan bug saat ini, seperti tiket trac # 35365 , hanya menyebutkan halaman depan statis yang memiliki masalah dengan pagination, tetapi karena bug berhubungan dengan
get_query_var( 'page' )
, saya akan berpikir bahwa ini juga akan menyebabkan masalah dengan pagination posting tunggal yang juga digunakanget_query_var( 'page' )
.Anda harus mencoba tambalan seperti yang dijelaskan dalam tiket trac. Jika ini berhasil, Anda bisa menerapkan tambalan dan menunggu v4.4.2 yang akan memperbaiki bug ini
sumber
Perhatikan bahwa ada kesalahan sintaks untuk ketiga contoh yang Anda berikan:
di mana tambahan
)
ditambahkan.Ganti baris ini ke:
Saya tidak akan merekomendasikan bermain-main dengan objek global secara umum, jadi saya pikir contoh terakhir Anda dengan
content_pagination
filter adalah cara untuk pergi ke sini.Anda mungkin juga ingin menghindari menambahkan halaman kosong dengan:
Ada juga yang hilang di
)
sini:sumber