it-swarm-id.com

Menautkan ke Halaman Hanya Menampilkan Komentar Tanpa Post Induk

Saya ingin menampilkan posting komentar di halaman mereka sendiri tanpa posting orang tua. Saya tahu saya bisa menggunakan wp_list_comments () pada halaman posting tunggal dan melewati fungsi callback untuk menggunakan markup tampilan komentar saya sendiri. Saya berencana untuk melakukan ini sehingga saya dapat memasukkan tautan dengan setiap komentar yang akan menunjukkan komentar itu di halamannya sendiri.

Jika ini bukan WordPress, saya akan menggunakan:

<a href = " www.example.com/individual_comment.php?comment_id = $comment_id">View single comment</a>

... dan ambil $ comment_id dari string kueri.

Seperti apa tampilan tautan di WordPress? yaitu: string apa yang akan saya sertakan untuk langsung ke, katakanlah, my_comments.php di mana saya memanggil get_comment ($ comment_id) dan comment_template ()?

<a href = "<?php bloginfo('url');?>/what/goes/here?comment_id = $comment_id"<View single comment</a>
5
kevtrout

Anda mungkin bisa membuat halaman baru di WordPress, dan memberikan halaman itu template khusus. Maka url akan menjadi apa pun yang biasanya untuk sampai ke halaman itu. Satu-satunya perbedaan adalah bahwa templat khusus yang Anda gunakan akan disetel untuk menerima comment_id melalui querystring, dan kemudian hanya mendapatkan detail untuk komentar spesifik, dan dalam kode templat menggemakan rincian komentar.

Jadi, jika Anda memiliki halaman di wordpress bernama "Rincian Komentar" yang Anda buat, Anda dapat mengakses halaman itu melalui http://www.domain.com/comment-details (dengan asumsi permalink Anda diaktifkan). Jadi tautan Anda akan terlihat seperti ini:

<a href = "<?php bloginfo('url');?>/comment-details?comment_id=$comment_id">View single comment</a>

Halaman "Rincian Komentar" akan diatur untuk menggunakan templat khusus yang akan berisi kode untuk memuntahkan detail.

2
Todd Perkins

Ada banyak cara berbeda untuk mencapai hal ini, beberapa lebih dipoles dari yang lain dan hampir semuanya berpotensi menimbulkan konflik dengan plugin lain, tetapi mengabaikan semua itu ada satu cara yang cukup dekat dengan apa yang Anda minta. :)

Solusi ini akan mendukung format URL seperti berikut ini di mana %comment_id% adalah ID numerik dari komentar Anda dari tabel wp_comments:

http://example.com/comments/%comment_id%/

Pertama, Anda harus mengonfigurasi penulisan ulang URL Anda menggunakan kode berikut. Semoga ini cukup jelas tetapi jangan ragu untuk bertanya:

$wp->add_query_var('comment_id');  // Add the "behind-the-scenes" query variable that WordPress will use
$wp_rewrite->add_rewrite_tag('%comment_id%', '([0-9]+)','comment_id=');  // Define a rewrite tag to match that assigns to the query var 
$wp_rewrite->add_permastruct('comment-page', 'comments/%comment_id%');   // Define a URL pattern to match the rewrite tag.

Anda juga perlu memanggil kode ini dalam kait aktivasi plugin untuk menghapus aturan, atau jika itu adalah situs Anda, Anda dapat menyimpan permalinks di pengaturan admin console > Permalinks daerah:

global $wp_rewrite;
$wp_rewrite->flush_rules(false);

Selanjutnya tambahkan kait filter parse_query. Ini akan dipanggil setelah WordPress memeriksa permintaan. Itu menguji untuk melihat apakah Anda menambahkan comment_id query_var diatur dan jika demikian ia menguji untuk melihat apakah Anda berada di URL yang diinginkan. Jika ya maka itu memuat array komentar menggunakan get_comment() untuk mengatur parameter 'p' (yang harus diatur ke ID posting) ke posting yang terkait dengan komentar. Dengan begitu ketika WordPress menjalankan kueri yang akan dijalankan tidak peduli apa setidaknya ia memuat sesuatu yang Anda perlukan dalam file templat tema comment.php Anda di bawah dan Anda tidak akan untuk menjalankan kueri lain nanti saat Anda membutuhkannya. Kode ini juga memberi tahu WordPress untuk mengabaikan postingan yang lengket menggunakan opsi caller_get_posts yang anehnya bernama:

add_filter( 'parse_query', 'my_parse_query' );
function my_parse_query( $query ) {
    global $wp;
    if (isset($query->query['comment_id']) && substr($wp->request,0,9)=='comments/') { 
        $comment = get_comment($query->query['comment_id']);
        $query->query_vars['p'] =  $comment->comment_post_ID; // Causes the comment's post to be loaded by the query.
        $query->query_vars['caller_get_posts'] = true;  // Keeps sticky posts from invading into the top of our query.
    }
}

Masih di sebelah Anda perlu menghubungkan kode di /wp-includes/template-loader.php menggunakan filter template_include. Ini akan dipanggil setelah WordPress memeriksa kueri dan memuat kiriman untuk komentar. Di sini pertama-tama Anda akan memeriksa lagi untuk comment_id di query_var dan juga untuk URL yang Anda inginkan. Jika demikian, kami mengganti halaman template /index.php dengan /comment.php yang merupakan file template tema yang perlu Anda buat:

add_filter( 'template_include', 'my_template_include' );
function my_template_include( $template ) {
    global $wp,$wp_query;
    if (isset($wp_query->query['comment_id']) && substr($wp->request,0,9)=='comments/') {
        $template = str_replace('/index.php','/comment.php',$template);
    }
    return $template;
}

Terakhir sekarang Anda perlu membuat file templat tema yang telah saya pilih untuk dipanggil /comment.php. Karena ini adalah tema Anda, Anda ingin membuatnya terlihat seperti yang Anda inginkan, tetapi berikut ini adalah contoh untuk Anda mulai:

<?php 
/*
 *  File: /wp-content/themes/my-theme/comment.php
 */ 
global $wp_query,$post;
$comment_id = $wp_query->query['comment_id'];
$comment = get_comment($comment_id);
$permalink = get_permalink($post->ID);
get_header();
?>
<div id="container">
    <div id="comment-<?php echo $comment_id; ?>" class="comment">
        <p>Comment by: <span class="comment-author">
            <a href="<?php echo $comment->comment_author_url; ?>"><?php echo $comment->comment_author; ?></a></span>
            on <span class="comment-date"><?php echo date("D M jS Y", strtotime($comment->comment_date)); ?></span>
          at <span class="comment-time"><?php echo date("h:ia", strtotime($comment->comment_date)); ?></span>
        </p>
        <p>About: <a href="<?php echo $permalink; ?>"><?php echo $post->post_title; ?></a></p>
        <blockquote><?php echo $comment->comment_content; ?></blockquote>
    </div>
</div>
<?php 
get_sidebar();
get_footer();

Ada pertanyaan? Tanyakan saja.

P.S. Semua kode yang saya jelaskan di atas dapat masuk dalam file functions.php tema Anda dan/atau dalam plugin Anda sendiri. Peringatan adalah untuk URL menulis ulang aturan pembilasan yang harus masuk dalam kait aktivasi plugin jika Anda akan memasukkannya sebagai gantinya kami hanya membilasnya secara manual di bagian permalinks di konsol admin. Saya tidak menunjukkan cara mendaftar kait aktivasi tetapi jika Anda ingin mempelajari lebih lanjut Anda dapat membacanya di sini .

15
MikeSchinkel