Hentikan WordPress yang mengarahkan ulang halaman komentar-1 ke halaman posting?

8

Saya ingin memiliki halaman terpisah untuk komentar pada sebuah posting, sehingga halaman ini: /2011/02/post-name/hanya menunjukkan posting dan kemudian Anda mengklik tautan untuk melihat komentar, membawa Anda ke halaman seperti ini:/2011/02/post-name/comment-page-1/

Saya kemudian akan memeriksa URL untuk melihat apakah "comment-page-x" ada di dalamnya, dan menampilkan halaman secara berbeda jika demikian (hapus posting, jadi orang tidak perlu menggulir melewati itu setiap waktu, dan juga gaya hal-hal yang agak berbeda).

Ini akan berhasil, tetapi WordPress mengalihkan comment-page-1ke halaman posting - saya perlu tetap comment-page-1di URL.

Apakah ini mungkin? Bagaimana saya bisa melakukannya? Terima kasih!

Shaun
sumber
1
upvotet Q. Seperti yang dikatakan Mike: bagus :) :)
kaiser

Jawaban:

7

Pertanyaan bagus! WordPress memberikan nomor halaman komentar Anda ke kueri var 'cpage'yang ditetapkan ketika URL Anda ada /comment-page-1/di akhir. Jadi pelakunya adalah dalam redirect_canonical()fungsi, baris 192 dari /wp-includes/canoncial.php.

if ( get_query_var('paged') || is_feed() || get_query_var('cpage') ) {

Karena redirect_canonical()fungsi akan ditetapkan sebagai tindakan yang dapat kita lakukan adalah memasukkan fungsi kita sendiri untuk dipanggil, minta fungsi kita mengatur 'cpage'var query false, memanggil redirect_canonical(), dan kemudian mengatur 'cpage'kembali ke apa itu sebelumnya; yang akan membuat WordPress tidak mengarahkan Anda.

Untuk memasukkan fungsi Anda sendiri, Anda perlu memanggil dua hook 'init'dan 'template_redirect'seperti itu jadi pastikan untuk mengatur 'init'hook untuk dipanggil setelah do_action()inti WordPress di dalam yang menambahkan redirect_canonical():

add_action('init','yoursite_init',11); //11=lower priority
function yoursite_init() {
  remove_action('template_redirect','redirect_canonical');
  add_action('template_redirect','yoursite_redirect_canonical');
}

add_action('template_redirect','yoursite_redirect_canonical');
function yoursite_redirect_canonical($requested_url=null, $do_redirect=true) {
  $cpage = get_query_var('cpage');
  set_query_var('cpage',false);
  redirect_canonical($requested_url, $do_redirect);
  set_query_var('cpage',$cpage);
}

Maka tentu saja Anda perlu melakukan sesuatu dengan Anda 'cpage'. Anda dapat memeriksa nilai yang dikembalikan oleh get_query_var('cpage')atau Anda dapat menambahkan kait lain untuk memungkinkan Anda membuat templat khusus komentar yang merupakan apa yang saya lakukan. Ini akan menambahkan tampilan untuk file templat tema dengan yang sama seperti yang biasanya dimuat tetapi dengan [comments].phpdi akhir nama bukan .php, yaitu single[comments].php. Perhatikan bahwa saya menetapkan prioritas untuk filter ini menjadi 11; Anda mungkin perlu mengatur ke jumlah yang lebih besar jika plugin yang Anda gunakan menambah sendiri setelah hook Anda:

add_filter('single_template','yoursite_single_template',11);
function yoursite_single_template($template) {
  if (get_query_var('cpage'))
    $template = str_replace('.php','[comments].php',$template);
  return $template;
}

Dan inilah buktinya bahwa semuanya bekerja!

Cuplikan layar Templat Halaman WordPress Khusus untuk Komentar
(sumber: mikeschinkel.com )

MikeSchinkel
sumber
Pendek .... wow! Sayang sekali kita tidak bisa melakukan +10 di sini ...
kaiser
Terima kasih atas tanggapan terperinci, tetapi sebuah pertanyaan - di mana saya dapat meletakkan kode ini? Saya sudah mencoba di functions.php tetapi tidak memiliki banyak keberuntungan. Dengan asumsi saya menggunakan tema dua puluh, di mana dalam file saya harus menambahkan kode?
Shaun
@Shaun - Angka. :) Suatu kali saya tidak menambahkan teks berikut ke jawaban saya, saya dipanggil untuk itu: "Anda dapat menambahkan kode berikut ke functions.phpfile tema Anda atau dalam .phpfile plugin yang mungkin Anda tulis." Tapi Anda mengatakan itu tidak berhasil? Apa sebenarnya yang tidak dilakukannya? Sudahkah Anda meletakkan echo "Test"; exit;pernyataan di masing-masing fungsi untuk memastikan kaitnya menyala? Apakah Anda memiliki plugin yang mungkin bertentangan? Apakah Anda mencoba mengubah 11di dua tempat menjadi 100?Apakah Anda memasukkan semua kode? Apakah Anda membuat file templat tema yang disebut single[comments].php?
MikeSchinkel
@ MikeSchinkel Brilliant, terima kasih. Saya tidak membuat satu [komentar] .php!
Shaun
@Shaun - Senang saya bisa membantu!
MikeSchinkel