WP Recipe
How to: Show related posts without a plugin
แสดงโพสต์ที่เกี่ยวข้องโดยค้นหาจาก Tag ที่เหมือนกับเรื่องที่ดูอยู่
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();
https://codex.wordpress.org/Function_Reference/wp_reset_query