Để 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 *****/
Do HT quen và khá yêu thích dạng shortcode nên viết theo dạng này. Hàm related_posts_shortcode có nhiệm vụ tạo shortcode [ related_posts ] cho hiển thị bài viết liên quan. Hàm htr_relate sẽ tự thêm shortcode trên vào cuối nội dung bài viết của bạn. Nếu muốn nổi bật,… bạn có thể tự thêm thắt css cho phù hợp với theme bạn.
Chúc bạn thành công! Bạn có thể xem demo ở dưới bài viết này.

{ 2 trackbacks }
{ 36 comments… read them below or add one }
Bác ơi. xem lại giúp em hình như code nó chạy luôn trong phần hướng dẫn rồi bác ạ.
5 bước chặn Spam hiệu quả
Làm chủ thùng rác của WordPress
Tự thay đổi năm ở footer WP
Không hiển thị quảng cáo đối với thành viên
Khắc phục lỗi: “cannot modify header information”
LeHienTinh´s last blog ..Hiển thị bài viết liên quan theo tag – plugin Related Posts
Vẫn chính xác mà bạn, bài viết trên có 3 tag, Nó lấy tất cả bài của 3 tag, 2 tag đầu chỉ có một bài này nên nó lấy tag thứ 3 là wp tips
vâng được rồi bác ơi. Thanks bác rất nhiều vất được thêm một plugin

LeHienTinh´s last blog ..Hiển thị bài viết liên quan theo tag – plugin Related Posts
Lúc nãy cứ ngỡ bác nói nó lấy bài không chính xác
em cảm ơn HT rất nhiều , cái này em cũng đang cần đây
bác HT cho em hỏi làm thế nào để chèn code vào bài viết và cho nó trong khung như đoạn code phía trên của bác vậy
cái này em trả lời được, hôm qua mới mò. chỉ cần qua html thêm thẻ đoạn code phải không bác hư trúc.
LeHienTinh´s last blog ..Hiển thị bài viết liên quan theo tag – plugin Related Posts
Cách đó cũng được, còn HT thì dùng plugin SyntaxHighlighter Evolved đã lược bỏ phần JavaScript
Đụng hàng rồi nhé

Tinh´s last blog ..Facebook Lại Knock Out Google Tại Mỹ
Hehe, hồi mới cài thesis nhảy qua bên bác chôm về đó mà
cám ơn bạn rất nhiều
tuananhg´s last blog ..Khắc phục lỗi đụng cổng 80 của Apache với SQL 2008
sao lại có cái này trong code vậy bác HT
1. 5 bước chặn Spam hiệu quả
2. Làm chủ thùng rác của WordPress
3. Tự thay đổi năm ở footer WP
4. Không hiển thị quảng cáo đối với thành viên
5. Khắc phục lỗi: “cannot modify header information”
tuananhg´s last blog ..Khắc phục lỗi đụng cổng 80 của Apache với SQL 2008
Do đó là shortcode và HT cũng đang sử dụng trên blog nên nó thực thi trong code luôn, Đã fix rồi nhé
Thanks bác đã nhắc nhở
Không ngờ bác HuTruc nhiều tài vặt phết, bác mà làm guest blogger em thì hay quá

Tinh´s last blog ..Facebook Lại Knock Out Google Tại Mỹ
Hi`hi`, HT tài vặt có biết chút đỉnh thôi. Em cũng đang định kiếm đề tài nào nhảy sang bác xin post một vài bài đây nhưng chưa có ý tưởng :(
Ông Trung này nghiên cứu Thesis+code kỹ ghê
Không ạ, HT đã nói rõ ở trên, đoạn code này không phải HT viết, HT chỉ edit lại thôi
Hình như mình là tác jả
Chứng minh
Cảm ơn HT về bài viết này nhé !
Thanks bác đã động viên
Công nhận nhà sư Hư Trúc toàn có bài độc. Toàn chơi chèn code mới siêu chứ.
Cũng bình thường thôi bác, đoạn code này không phải của HT nhé
Vậy có cần điền câu lệnh trong index.php không bác, hay nó tự động xuất hiện.

Bệnh tim mạch´s last blog ..Thuốc trị thấp tim
Hoàn toàn tự động, trong đoạn code trên, hàm htr_relate có nhiệm vụ thêm shortcode để tự động hóa việc này
Cám ơn bác. Nếu chèn trực tiếp trong index (code cũng hao hao giống bác lấy từ minh mèo blog ) thì bị lỗi comment, comment bài này thì lại ra bài khác.
Các bài viết liên quan theo: Categories thì làm như thế nào? hả bác.
http://hutruc.com/hien-thi-bai-viet-cung-chuyen-muc-khong-dung-plugin/
Link nè bác
LeHienTinh´s last blog ..Active key cho kis 2010
hichic, em đưa vào function.php, update phát là lỗi ngay, không biết có phải do theme em đang dùng không, bài tut nào hướng dẫn đưa vào function.php, em đưa vô là bị lỗi ngay thôi
Các đoạn code trong bài hầu như đều được kiểm tra trước khi đăng nên không đến nổi lỗi tất cả thế được, có thể do trong quá trình thêm code vào bị lỗi chăng, bạn tham khảo bài viết “khắc phục lỗi: cannot modify header infomation” thử xem.
Mình chèn code này vào function.php và đã hiện rồi.
Còn chèn cái code hiển thị bài viết cùng chuyên mục thì ko thấy ko thấy hiện.
Bạn nào biết hướng dẫn mình mình với.
và hướng dẫn mình đóng 2 cái khung và tô màu nhẹ nhẹ cho 2 cai ô trên giống HT với.
P/s: Chỉ đơn giản là đóng 2 cái khung (bên trong màu gì cũng đc), ko dùng đến plugin giống HT đâu.
Mình cảm ơn trước!
.bvcm{border: 1px solid #afe5f8; background: #e5f5fc;-moz-border-radius:4px; -webkit-border-radius:4px;width:45%;padding:10px;}Blogger thì dùng linkwithin.
Code rất tuyệt, cảm ơn bạn nhé

vienhoasi´s last blog ..English Để Học Tiếng Anh Tốt Mà Kô Cần Du Học Mất 30 nghìn Dolllars-năm x4 năm
Uh, Trước đây HT cũng bị tình trạng này, đúng là trong code HT tìm trên mạng có vấn đề, nhưng đoạn trên đây thì không có vấn đề gì