ArmNo

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(); ได้ ที่นี่ ครับ

Leave a Comment

*

You may use these HTML tags and attributes: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>