loading..

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

by Huỳnh Trung on March 19, 2010

Để 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 }

HuTruc
March 19, 2010 at 10:45 am
Hiển thị bài viết cùng chuyên mục không dùng plugin — Hư Trúc Blog
April 6, 2010 at 5:16 pm

{ 36 comments… read them below or add one }

1 LeHienTinh March 19, 2010 at 11:32 am

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 My ComLuv Profile

Reply

2 Huỳnh Trung March 19, 2010 at 11:39 am

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

Reply

3 LeHienTinh March 19, 2010 at 12:07 pm

vâng được rồi bác ơi. Thanks bác rất nhiều vất được thêm một plugin :D
LeHienTinh´s last blog ..Hiển thị bài viết liên quan theo tag – plugin Related Posts My ComLuv Profile

Reply

4 Huỳnh Trung March 19, 2010 at 1:54 pm

Lúc nãy cứ ngỡ bác nói nó lấy bài không chính xác :)

Reply

5 tuananhg March 19, 2010 at 1:11 pm

em cảm ơn HT rất nhiều , cái này em cũng đang cần đây

Reply

6 tuananhg March 19, 2010 at 1:13 pm

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

Reply

7 LeHienTinh March 19, 2010 at 1:19 pm

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 My ComLuv Profile

Reply

8 Huỳnh Trung March 19, 2010 at 1:53 pm

Cách đó cũng được, còn HT thì dùng plugin SyntaxHighlighter Evolved đã lược bỏ phần JavaScript

Reply

9 Tinh March 19, 2010 at 3:11 pm

Đụng hàng rồi nhé :)
Tinh´s last blog ..Facebook Lại Knock Out Google Tại Mỹ My ComLuv Profile

Reply

10 Huỳnh Trung March 19, 2010 at 3:38 pm

Hehe, hồi mới cài thesis nhảy qua bên bác chôm về đó mà :D

11 tuananhg March 19, 2010 at 2:42 pm

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 My ComLuv Profile

Reply

12 tuananhg March 19, 2010 at 1:34 pm

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 My ComLuv Profile

Reply

13 Huỳnh Trung March 19, 2010 at 1:55 pm

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é :2: Thanks bác đã nhắc nhở :)

Reply

14 Tinh March 19, 2010 at 3:12 pm

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á :2:
Tinh´s last blog ..Facebook Lại Knock Out Google Tại Mỹ My ComLuv Profile

Reply

15 Huỳnh Trung March 19, 2010 at 3:40 pm

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 :(

Reply

16 Hùng March 19, 2010 at 4:06 pm

Ông Trung này nghiên cứu Thesis+code kỹ ghê

Reply

17 Huỳnh Trung March 19, 2010 at 4:10 pm

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 :^_*:

Reply

18 n@no March 19, 2010 at 10:39 pm

Hình như mình là tác jả :D

Reply

19 Huỳnh Trung March 20, 2010 at 10:18 am

Chứng minh :)

Reply

20 Thuviengiadinh.com March 20, 2010 at 4:09 pm

Cảm ơn HT về bài viết này nhé !

Reply

21 Huỳnh Trung March 20, 2010 at 4:46 pm

Thanks bác đã động viên :2:

Reply

22 Tôi Yêu Google March 20, 2010 at 8:07 pm

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ứ. :2:

Reply

23 Huỳnh Trung March 21, 2010 at 8:54 am

Cũng bình thường thôi bác, đoạn code này không phải của HT nhé :2:

Reply

24 Bệnh tim mạch March 21, 2010 at 5:48 pm

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. :boi:
Bệnh tim mạch´s last blog ..Thuốc trị thấp tim My ComLuv Profile

Reply

25 Huỳnh Trung March 22, 2010 at 5:15 pm

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 :)

Reply

26 Suckhoegiadinh.org March 23, 2010 at 11:47 am

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. :2:

27 Tạp Chí Web April 9, 2010 at 9:18 pm

Các bài viết liên quan theo: Categories thì làm như thế nào? hả bác.

Reply

28 LeHienTinh April 10, 2010 at 8:29 am
29 nguyentrung167 May 16, 2010 at 1:10 am

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 :cry: :cry:

Reply

30 Huỳnh Trung Post on Mobile May 16, 2010 at 7:54 am

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.

Reply

31 nguyenkhoadng June 25, 2010 at 6:48 pm

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! :2:

Reply

32 Huỳnh Trung July 23, 2010 at 4:05 pm
.bvcm{border: 1px solid #afe5f8; background: #e5f5fc;-moz-border-radius:4px; -webkit-border-radius:4px;width:45%;padding:10px;}

Reply

33 Truyen Tranh Online July 10, 2010 at 10:37 am

:bi: blogger có xài đc cái này hem ta ?

Reply

34 Huỳnh Trung July 23, 2010 at 4:16 pm

Blogger thì dùng linkwithin.

Reply

35 vienhoasi July 29, 2010 at 12:38 pm

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ămMy ComLuv Profile

Reply

36 Huỳnh Trung March 23, 2010 at 4:34 pm

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ì :vic:

Reply

Leave a Comment

CommentLuv Enabled
:cuoiduyen: :2: :$$$: :potoanthan: :heya: :bi: :bimat: :nangly: :D :-O :chem: more »

Previous post:

Next post: