Balasan komentar tanpa utas dengan tautan ke komentar asli

10

Saya akan menjelaskan apa yang ingin saya capai.

Saya ingin memiliki komentar reguler (datar / klasik) tanpa utas dengan tautan balasan ke setiap komentar. Ketika seseorang membalas komentar, komentar balasan akan berakhir di bagian atas (atau bawah) sebagai komentar terbaru sama seperti komentar default non-utas, tetapi tidak seperti komentar non-utas default, balasan harus menampilkan tautan ke komentar / penulis asli.

Ada solusi yang diusulkan di forum wordpress:

http://wordpress.org/support/topic/reply-to-link-for-chronological-non-threaded-comments

Aku hanya tidak membuatnya bekerja. Saya tidak yakin dalam file apa poster itu menempatkan potongan kode yang berbeda. Saya mencoba menggunakan kode dan menghubungkan fungsi ke comment_post:

add_action('comment_post', 'print_reply_link', 10, 2);

function print_reply_link( $comment_id, $approved ){
  if( $approved ){
    $comment = get_comment( $comment_id );
    if ( $comment->comment_parent ) {
    $parent = get_comment( $comment->comment_parent );
    $parent_link = esc_url( get_comment_link( $comment->comment_parent ) );
    printf( ' in reply to <a href="%1$s">%2$s</a>', $parent_link, $parent->comment_author );
    } 
  }
}

Ini mengembalikan halaman kosong dengan "in reply to authorname ". Setelah memuat ulang kiriman, komentar balasan muncul dengan benar tetapi tanpa tautan ke komentar asli

Keterampilan pengkodean saya sangat mendasar sehingga saya tidak tahu bagaimana harus melanjutkan. Akan sangat berterima kasih atas bantuannya.

sarytash
sumber
Apa isi hrefdalam ayang mengikuti 'sebagai balasan atas' sesuai alat 'Periksa Elemen' di Chrome (atau serupa di browser pilihan Anda)?
mor7ifer
Saya telah memecahkan masalah setelah banyak coba-coba. Caranya adalah dengan mendapatkan potongan-potongan kode dalam urutan dan tempat yang tepat di file komentar dan fungsi. The sdi %1$sberarti bahwa argumen diperlakukan sebagai dan disajikan sebagai string. Ini dijelaskan secara rinci dalam manual php untuk fungsi sprintf: php.net/manual/en/function.sprintf.php
sarytash
3
Anda harus menyerahkan apa yang Anda lakukan sebagai solusi untuk membantu menjaga situs tetap terorganisir dan membantu siapa saja yang datang setelah Anda dengan masalah yang sama untuk mengatasinya dengan cepat dan efisien.
mor7ifer
Ya jika Anda dapat memposting solusi kerja yang bagus.
Borek Bernard
1
setuju, akan senang melihat ini beraksi.
Helgatheviking

Jawaban:

4

Ini adalah solusi saya dan bukan solusi yang disarankan yang disarankan di forum WordPress. Ternyata cukup mudah, tetapi melibatkan beberapa langkah.

1) Pergi ke wp-admin-> Pengaturan-> Diskusi dan matikan komentar berulir. Ini akan menonaktifkan threading, yang kita inginkan, tetapi juga akan menghilangkan kemampuan bagi kita untuk "membalas" komentar tertentu. Kita harus mengembalikannya.

2) Tambahkan skrip di bawah ini ke functions.php tema Anda atau ke plugin.

function load_script_for_fake_threading() {
    if (is_singular()) wp_enqueue_script('comment-reply');
}
add_action('wp_enqueue_scripts','load_script_for_fake_threading');

3) Pencetakan komentar ditangani oleh panggilan balik ke wp_list_comments . TwentyEleven menggunakan fungsi twentyeleven_comment()di dalamnya functions.php. Jika tema Anda tidak memiliki panggilan balik, Anda harus membuatnya. Secara default, konten metode start_el dari kelas Walker_Comment di "wp-include / comment-template.php" digunakan. Salin atau salin panggil balik tema dan ganti nama fungsinya fake_threaded_comment.

3) Temukan fungsi wp_list_comments di tema Anda comments.phpdan ubah callback. Seharusnya terlihat seperti:

wp_list_comments(array('callback'=>'fake_threaded_comment'));

4) Sekarang kita akan sedikit menipu. Dalam panggilan balik itu, 'fake_threaded_comment', harus ada panggilan ke fungsi comment_reply_link . Kita perlu mengeditnya sehingga kita memberikan argumen 'kedalaman' dan 'max_depth' yang sulit. Kami sedang mengatur 'kedalaman' ke 1 dan max_depth ke 2. Ini akan mendapatkan tombol / tautan "Balas" kami.

comment_reply_link( 
  array_merge( 
    $args, 
      array( 
        'reply_text' => __( 'Reply <span>&darr;</span>', 
        'themetextdomainname' ), 
        'depth' => 1, 
        'max_depth' => 2 
)));

5) Atur tautan ke komentar orang tua. Di samping fungsi panggilan balik Anda mungkin telah memperhatikan referensi $comment. $comment->comment_parentadalah ID dari komentar yang dijawab dan get_comment_link($comment->comment_parent)memberikan URL dari komentar orang tua (bukan markup jangkar lengkap). get_comment($comment->comment_parent)akan mendapatkan data komentar orang tua. Jadi, sesuatu seperti ...

$pcom = get_comment($comment->comment_parent);
echo '<a href="'.get_comment_link($comment->comment_parent).'">This is a reply to '.$pcom->comment_author.'</a>';

Itu dia. Anda sekarang dapat mengomentari komentar tertentu tetapi sekali diterbitkan komentar akan muncul di akhir atau di awal daftar komentar tergantung pada urutan pemuatan.

Diuji dengan TwentyEleven di WordPress 3.4.1 (sedikit usang tetapi sudah ada di server dev saya). Saya yakin ada hal-hal yang bisa dilakukan oleh tema atau plugin untuk memecahkan ini, tetapi saya tidak berpikir tema atau plugin yang berperilaku baik akan merusaknya.

Itu adalah perbuatan baik saya untuk hari itu. Tolong beri tahu saya jika ada masalah.

s_ha_dum
sumber