WordPress : แสดง Post ที่เกี่ยวข้องโดยไม่ใช้ Plugin
เรื่องที่เกี่ยวข้อง หรือ Related Posts สำหรับผมแล้วถือว่าเป็นสิ่งจำเป็นที่บล็อกทุกบล็อกควรจะมีครับ เพราะมันช่วยให้ผู้อ่านใช้เวลากับบล็อกของเรามากขึ้น (เรียกง่ายๆ ว่าช่วยดักท่านผู้ชมไม่ให้ออกจากบล็อกเรา โดยการเสนอให้อ่านเรื่องอื่นต่อ) .. พอเปลี่ยนธีมแล้วไม่มี Related Posts ก็เลยไปเสิชหา วิธีการเพิ่มโพสต์ที่เกี่ยวข้องโดยไม่ใช้ Plugin ดูครับ เจอจากบล็อก WP Recipe - How to: Show related posts without a plugin ซึ่งผมก็เอาโค้ดมาดัดแปลงต่ออีกหน่อยครับผม
โดยหลักการก็คือ เราจะแสดงโพสต์ที่เกี่ยวข้องโดยค้นหาจาก Tag ที่เหมือนกับเรื่องที่ดูอยู่ ซึ่งเราก็ต้องไปเพิ่มโค้ดใน WordPress Loop ของเราครับ ตรงนี้แล้วแต่ธีมที่ใช้นะครับว่าอยู่ไฟล์ไหน ของผมอยู่ที่ single.php
ซึ่งทำหน้าที่แสดงโพสต์แต่ละโพสต์ ผมเพิ่มโค้ดนี้ข้างล่างเนื้อหาของโพสต์
<div class="related-posts">
<?php
$tags = wp_get_post_tags($post->ID);
if ($tags) :
$first_tag = $tags[0]->term_id;
$args=array(
'tag__in' => array($first_tag),
'post__not_in' => array($post->ID),
'showposts'=>5,
'caller_get_posts'=>1
);
$my_query = new WP_Query($args);
if( $my_query->have_posts() ) : ?>
<h4>Related Posts (beta)</h4>
<ul>
<?php while ($my_query->have_posts()) : $my_query->the_post(); ?>
<li>
<a href="<?php the_permalink() ?>" rel="bookmark" title="
Permanent Link to <?php the_title_attribute(); ?>">
<?php the_title(); ?></a>
</li>
<?php endwhile; ?>
</ul>
<?php endif;
endif;
wp_reset_query();
?>
</div>
ถ้าลองอ่านโค้ดดู มันคือการเอา Tag แรกของโพสต์ที่แสดงอยู่ ไปค้นหาโพสต์ที่มี Tag นี้เหมือนกัน เราจะได้ Custom Loop ใน Main Loop อีกที เพราะฉะนั้นเมื่อเราวน Custom Loop เสร็จแล้ว ต้องเรียกใช้ฟังก์ชั่น wp_reset_query();
เพื่อเป็นการ Reset Custom Loop และกลับเข้าสู่ Loop หลักครับ .. ตรงนี้สำคัญ (และโค้ดต้นฉบับไม่ได้ใส่มาให้) เพราะถ้าเราไม่ Reset Query เวลาเรียกใช้ตัวแปร $post
หลังจากนี้ มันจะเป็นของ Custom Loop แทนที่จะเป็นของ Main Loop และอาจทำให้ค่าต่างๆ เพี้ยนได้ครับ
อ่านรายละเอียดของ wp_reset_query();
ได้ ที่นี่ ครับ