Hiển thị Bài viết liên quan và Bài viết cùng chuyên mục không dùng plugin

Gần đây có vài bạn thắc mắc hỏi mình cách hiển thị Bài viết liên quan + Bài cùng chuyên mục giống như blog của mình. Trên hutruc.com đã có 2 bài viết hướng dẫn các bạn thực hiện thủ thuật này, bạn có thể tham khảo bài viết tại 2 link này :

Bài viết liên quan + Bài viết cùng chuyên mục không dùng plugins />

Tuy nhiên, trên 2 bài viết của Hu Truc vẫn chưa thật sự đầy đủ (thiếu custom CSS) nên nhiều bạn chắc chưa thể làm được (nhất là những bạn không dành về code), hôm nay mình muốn giới thiệu lại cho các bạn thủ thuật giúp hiển thị bài viết liên quan + bài cùng chuyên mục không dùng plugin, hy vọng các bạn sẽ thấy nó hữu ích cho blog của mình khi lại có thêm một cách để giữ chân độc giả của mình.

Để đơn giản, mình đã gộp cả code của 2 bài viết trên Hutruc lại làm 1 (có edit tý chút) các bạn chỉ cần copy đoạn code sau vào file functions.php của themes đang sử dụng.

/********************************************************************
Bài viết liên quan
********************************************************************/
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 = '<ul style="font-weight:bold;">';
 		// 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 style="font-weight:bold;" 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 .= '</ul></div>';
		return $retval;
	}
	return;
}
add_shortcode('related_posts', 'related_posts_shortcode');
function htr_relate($content){
	$content=$content;
        if (is_single()){
	$content.='<div class="bvlq" style="float: left;"><h3>Bài viết liên quan</h3>';
	$content.='[related_posts]';
    }
	return $content;
}
add_filter ('the_content', 'htr_relate');
/********************************************************************
Bài cùng chuyên mục
********************************************************************/
function bai_viet_chuyen_muc( $atts ) {
	extract(shortcode_atts(array(
	    'limit' => '5',
	), $atts));
	global $post;
	$related_cat='<ul style="font-weight:bold;">';
	$categories = get_the_category($post->ID);
	if ($categories) {
		$category_ids = array();
		foreach($categories as $individual_category) $category_ids[] = $individual_category->term_id;
		$args=array(
			'category__in' => $category_ids,
			'post__not_in' => array($post->ID),
			'showposts'=>$limit,
			'caller_get_posts'=>1
		);
		$rl_cat = new wp_query($args);
		if( $rl_cat->have_posts() ) {
			while ($rl_cat->have_posts()) {
				$rl_cat->the_post();
				$post = get_post($post_id);
				$title=$post->post_title;
				$link=get_permalink($post->id);
				$related_cat.='<li><a href="'.$link.'" title="'.$title.'">'.$title.'</a></li>';
			}
		}
		wp_reset_query();
	}
	$related_cat.= '</ul></div>';
	return $related_cat;	
}
add_shortcode('baivietcm', 'bai_viet_chuyen_muc');
function dtc_bai_cung_chuyen_muc($content){
	$content=$content;
        if (is_single()){
	$content.='<div class="bvnn" style="float:right;"><h3>Bài cùng chuyên mục</h3>';
	$content.='[baivietcm]';
    }
	return $content;
}
add_filter ('the_content', 'dtc_bai_cung_chuyen_muc');
/********************************************************************
End Bài viết liên quan + Bài viết cùng chuyên mục
********************************************************************/

Như vậy là cơ bản đã hoàn tất, bây giờ blog của bạn đã tự thêm box Bài viết liên quan + Bài viết cùng chuyên mục giống như blog của mình rùi đó. Việc tiếp theo là bạn phải custom trong file style.css của themes đang dùng bằng cách thêm vào đó đoạn code sau :

.bvlq,.bvnn{border: 1px solid #afe5f8; background: #e5f5fc;-moz-border-radius:4px; -webkit-border-radius:4px;width:45%;padding:10px;}
.bvlq ul li a{color:#1E90FF;}
.bvlq h3{font-weight:bold;font-size:16;color:#00000;}
.bvnn ul li a{color:#1E90FF;}
.bvnn h3{font-weight:bold;font-size:14;}

Bạn có thể tùy chỉnh CSS theo ý mình. Bây giờ hãy xem kết quả mà bạn đạt được trên blog của mình nào. Chúc thành công nhé.

60 Responses

  1. Tinh says:

    Các cao thủ về code và theme đã ra tay :votay:

    • Nutatu says:

      e đang sự đinh viết cho eblogviet một bài, nhưng chưa nghiên cứu kỹ nên vẫn còn chưa hạ tay gõ phím. Hy vọng sớm có sản phẩm cho bác

      • pác ơi! có vẻ không ok lắm! em làm thì nó hiển thị tốt và đạt yêu cầu, ngặt nỗi : nó dè sát mì phần hiển thị tên người viết và ngày viết! giá mà nó xa nhau khoảng một dòng là tuyệt! pác chỉnh lại giúp em với :lunglinh:

        • Thành Trung says:

          Thật ra mình không hiểu rõ ý bạn lắm, có thể nói rõ hơn không?

          • thế này nè bác! 2 cái khung hiển thị bài viết ngẫu nhiên và bài viết dùng chuyên mục ấy, em edit trên một số theme thì thấy nó hiển thị sát với dòng cuối cùng; đặc biệt là đè lên dòng sát dưới đáy khiến dòng ấy bị mất khoản 1/8 . Em thấy không thích lắm. bác chỉnh lại giúp em nhé :2:

            • Thành Trung says:

              bác cho link site mà bác áp dụng đi

              • Rất tiếc là em đã đổi theme rồi bác ạ! còn thủ thuật này em đã không áp dụng nữa (vì em thấy trang em như vậy là khá đủ rồi!) tuy nhiên lúc trước áp dụng trên theme eximius.2.2 thì gặp lỗi đó, bác có thể kiểm tra lại. :colen: ! chào bác. Dẫu sao vẫn thank bác đã hỗ trợ nhiệt tình

  2. linh xinh says:

    hay mình rất thích bài kiểu như thế này để áp dụng luôn . thank you :nangly:

  3. ebookamz.com says:

    Cộng đồng Blog Việt đang khởi sắc trở lại. @};-

  4. Mèo khùng says:

    Các bác đính kèm luôn cả source cho các bạn ấy dễ dùng. :cuoiduyen:

  5. Hy vọng là cộng đồng blog việt đông vui và phát triển rầm rộ trong cả năm chứ không chỉ 1 mùa :cuoiduyen:

  6. Ha Tran says:

    E xin đoạn code này về thử nghiệm. Thanks

  7. linh xinh says:

    bác HT ơi. sao bác không đặt quảng cáo trên blog của bác để kiếm tiền nhở. em băn khoăn mãi mà không biết lý do tại sao. em thấy kiêm mmo cũng đươc đấy chứ a. bác tỉnh eblogviet còn kiếm mấy nghìn đo la / thang cơ mà :bi:

  8. LoveLy_H says:

    Chơi cái này nhẹ hơn plugin bác nhỉ

  9. mathblog says:

    “Để đơn giản, mình đã gộp cả code của 2 bài viết trên Hutruc lại làm 1 (có edit tý chút) các bạn chỉ cần copy đoạn code sau vào file functions.php của themes đang sử dụng.”. Xin hỏi bạn nếu dùng thesis thì copy vào file custom_functions.php phải ko bạn. Thanks.

  10. Mình không muốn nó tự động chèn trong bài viết mà muốn tự chèn bằng tay thì làm như thế nào vậy.
    Chèn tự động nó không ở dưới rating

    • Thành Trung says:

      Đơn giản lắm bạn ah, bạn chỉ cần loại bỏ code cho phép add tự động vào vài viết trong đoạn mã trên là được, cụ thể bạn tìm 2 đoạn code sau trong đọan mã giới thiệu ở bài viết và remove nó đi nha
      add_filter (‘the_content’, ‘htr_relate’);

      add_filter (‘the_content’, ‘dtc_bai_cung_chuyen_muc’);

      sau đó, khi bạn muốn thêm bài viết liên quan thì chỉ cần dán đoạn code sau trong khung soạn thảo HTML của bài viết [related_posts]
      và [baivietcm] cho bài cùng chuyên mục nhé. Chúc thành công!

      :D :D :D

      • Mình muốn chèn ở lood.php cơ không phải chèn khi post bài .
        Vì để tự add dưới ‘the_content’ thì cái wp_link_pages nó lại ở dưới mất .
        Mà cái wp_link_pages lại không có trong functions.php lên không thể để auto dưới cái đó được

  11. Cần quá ai giúp với :bi:

  12. nguyenhuytap says:

    functions.php ở chỗ nào hả anh em vừa lập nên ko biết nó ở đâu,giúp em với

    • Thành Trung says:

      Nó nằm trong folder của themes bạn sử dụng đó, đơn giản nhất là bạn vào Admin Cpanel của WordPress => Appearance => Editor nhìn bên phải thấy chữ fuctions.php thì click vào để edit file này. Chúc thành công

    • Nó thường nằm ngang hàng với thư mục của theme (có vài theme không có file này, nhưng đa số là có)

  13. Trịnh Trọng Gia says:

    Anh admin ơi!

    Em vừa làm quen với wordpress. em thắc mắc chút mong được anh giúp đỡ. Em muốn hiển thị những bài viết ở 1 category mình muốn trên thanh sidebar thì phải làm sao? Chỉ hiện những bài viết ở 1 category thôi còn anh ha còn các category khác thì không hiện.

    Mong anh giúp đỡ em. Cám ơn anh nhiều nhiều. Chúc website mình ngày càng phát triển và là sân chơi cho những người đam mê wordpress.
    :bi:
    :bi:
    :bi:

  14. Fgeek says:

    Bác Hutruc có thể hướng dẫn code hiển thị số bài viết liên quan & cùng chuyên mục dạng như ” Bài viết liên quan ( 5 bài) được không? :bi: Thank bác nhiều :lunglinh:

  15. OLtech says:

    Mình có 1 thắc mắc như thế này. Giả sử có 10 bài viết liên quan, mình muốn chia 5 bài viết đầu có class=”left”, còn 5 bài viết sau có class=”right”. Tương tự vó 4 bài thì 2 bài đầu class=”left”, 2 bài viết sau class=”right”. Bác nào giúp mình với :cannhac:

  16. Quang Dung says:

    Mình mới mò WP làm cái web Song Dep (http://songdep.seominar.org). Search tren Net tim cai plugin Related Post rồi cài thử mà chưa ưng ý. Search được bài này, mần theo, copy nguyên cả code trên paster vào functions.php. Ai dè màn hình hiện toàn mã code làm mình…tá hỏa :-O . Tưởng code ko hợp với web mình, tìm hiểu mấy bài khác, cuối cùng mới biết, phải paste code trước ?> mới OK. Cuối cùng cũng OK, web hiển thị giống hình demo trên rùi. Pác hướng dẫn kỹ chút cho mấy thằng gà như mình nhờ chút nhé, ko thì mấy thằng gà như mình chạy loanh quanh tội nghiệp lắm! :x: :2:

  17. Opaz says:

    Hiện tại trang của mình đang xài theme All Tutorials (http://alteredadvice.com/free-wp-theme-all-tutorials/), trên hình demo của nó thì dưới mỗi bài viết đều có sẵn mục bài viết liên quan nhưng khi mình cài thêm xong thì bên dưới mỗi bài viết không thấy hiển thị mục này. Mình muốn hỏi làm sao nó mới hiển thi được? Và cách chỉnh số lượng bài viết hiển thị. Thanks mọi người trước :lunglinh:

  18. Thanh says:

    mình đã đọc và làm được nhưng có một điều là khi mình lưu file functions.php thì nó báo lỗi utf-8 và không cho lưu. Rồi mình ghi lại Bai viet lien quan kiểu không có dấu thì nó cho lưu. Rất mong nhận sự giúp đỡ của bạn

  19. Hoàng Tú says:

    Trong trường hợp đăng ký sử dụng wordpress không theo cách cài đặt thì làm thế nào (tức là đăng ký dùng WP qua wordpress.com), trong đó không có cách nào chỉnh sửa được code css, nếu muốn chỉnh được phải mua 30$. Xin vui lòng chỉ giúp?

  20. ivnshare.com says:

    Chào bro.
    Mình có làm theo hướng dẫn của bro và mình có chút thắc mắc mong đc giải đáp:
    Mình đang xài theme metube. khi mình thêm như bro nói thì nó lại bị lỗi như này
    http://clip.ivnshare.com/2011/chuyen-do-dau-ai-ngo-usa-version-ung-hoang-phuc.html
    Bro xem thử nhé. Bro click vào nhấn vào đây để xem lời bài hát ý.
    Và mình muốn đưa nó cũng như cái share this ra ngoài khỏi cái ” Click vào đây để xem lời bài hát thì làm thê nào ạ.
    Thanks bro

  21. zen.1709 says:

    Anh có thể hướng dẫn cách làm ra 2 list “Tin mới hơn” và “Tin cũ hơn” (liệt kê theo thời gian post bài) như các trang tin tức không ạ?
    Bài viết liên quan chỉ lấy được bài viết mới nhất hoặc Random mà không xếp dc như vậy.

    Thanks anh!

  22. HIX. CÁI NÀY DÀNH CHO WORDPRESS. TÍ NỮA THÌ NHẦM ỐP SANG BLOGGER. XÍT TOI MẠNG. HÍ HÍ
    :cuoiduyen:

  23. nobita says:

    mình muốn làm cái sản phâm liên quan kiểu slide truoc có hình thumnail thì code sao zay hu truc
    [url]http://www.fshop14.com[url]

  24. nobita says:

    hutruc oi chi jup minh cai nay với, cái relate post của mình nó hiện ở tất cả các bài post vậy làm sao để kok cho nó hiện ở tất cả các bài viết của 1 chuyen muc kok ???

    http://www.fshop14.com

    ???? :bi:

  25. nobita says:

    doan code tin lien quan mình làm theo hướng dẫn ở trang này:
    http://www.bin-co.com/blog/2009/04/show-related-post-in-wordpress-without-a-plugin/

  26. Thanh says:

    Cảm ơn admin đã giúp, tui lên mạng cả ngày mà giờ mới thấy bài này đấy. Thank… :2:

  27. Ái chà! Đang search cái này thì dính ngay vào blog bác Hu Truc, may quá :D

  28. tran thu says:

    Admin giúp mình với,
    mình add code vào rồi và hiện bài viết liên quan và bài viết cùng chuyên mục nhưng khi login vào trang admin thì nó báo lỗi và không hiện lên ô đăng nhập
    “Warning: Cannot modify header information – headers already sent by (output started at /home/vietnamp/domains/phongchongmoi.vn/public_html/wp-content/themes/movable/functions.php:1) in /home/vietnamp/domains/phongchongmoi.vn/public_html/wp-ưng/pluggable.php on line 866″
    Khi mình tách đoạn code của bạn vào đoạn php khác và cho xuống phía dưới thì nó báo lỗi dài dài ở phía trên và ở phía dưới là ô đăng nhập nhập thì không vào được nó vẫn hiện mấy dòng lỗi.
    Nhờ anh em chỉ giúp lỗi ở đâu nhé.
    Cảm ơn nhiều.