Hiển thị bài viết liên quan không sử dụng plugin

80

Để tiện cho người đọc, chúng ta thường cho hiển thị các bài viết liên quan với bài đang đọc. Đây cũng là một cách giữ chân độc giả. Để thực hiện việc này, có rất rất nhiều plugin từ đơn giản đến phức tạp. Theo yêu cầu bạn đọc, HT xin giới thiệu với các bạn đoạn code thực hiện việc này mà không phải dùng đến plugin.

HT xin nói rõ là đoạn code này không phải HT tự viết mà sưu tầm được trên mạng. Do không có ý định viết bài này nên không lưu giữ nguồn gốc. Nói sưu tầm cũng không chính xác mà là “vơ lấy” bởi vì nó tràn lan dẫn đến không biết chính xác tác giả là ai. Vì vậy nếu có cảm ơn tác giả, HT xin mạn phép cảm ơn bác Google vậy.

Công việc của bạn là gì? Chỉ đơn giản copy và paste đoạn code sau và file functions.php (custom_functions.php nếu bạn sử dụng thesis)

/***** Bai viet lien quan http://hutruc.com *****/
function related_posts_shortcode( $atts ) {
	extract(shortcode_atts(array(
	    'limit' => '5', //So bai viet hien thi
	), $atts));

	global $wpdb, $post, $table_prefix;

	if ($post->ID) {
		$retval = '<ol class="related_posts">';
 		// Get tags
		$tags = wp_get_post_tags($post->ID);
		$tagsarray = array();
		foreach ($tags as $tag) {
			$tagsarray[] = $tag->term_id;
		}
		$tagslist = implode(',', $tagsarray);

		// Do the query
		$q = "SELECT p.*, count(tr.object_id) as count
			FROM $wpdb->term_taxonomy AS tt, $wpdb->term_relationships AS tr, $wpdb->posts AS p WHERE tt.taxonomy ='post_tag' AND tt.term_taxonomy_id = tr.term_taxonomy_id AND tr.object_id  = p.ID AND tt.term_id IN ($tagslist) AND p.ID != $post->ID
				AND p.post_status = 'publish'
				AND p.post_date_gmt < NOW()
 			GROUP BY tr.object_id
			ORDER BY count DESC, p.post_date_gmt DESC
			LIMIT $limit;";

		$related = $wpdb->get_results($q);
 		if ( $related ) {
			foreach($related as $r) {
				$retval .= '<li><a title="'.wptexturize($r->post_title).'" href="'.get_permalink($r->ID).'">'.wptexturize($r->post_title).'</a></li>';
			}
		} else {
			$retval .= '<li>No related posts found</li>';
		}
		$retval .= '</ol>';
		return $retval;
	}
	return;
}
add_shortcode('related_posts', 'related_posts_shortcode');
function htr_relate($content){
	$content=$content;
        if (is_single()){
	$content.='<h3>Bài viết liên quan</h3>';
	$content.='[related_posts]';
    }
	return $content;
}
add_filter ('the_content', 'htr_relate');
/***** # Bai viet lien quan http://hutruc.com *****/