Code tạo danh sách bài viết liên quan trong WordPress

Có lẽ các bạn đều nhận thấy rõ tác dụng của danh sách bài viết liên quan (related post) ở cuối mỗi bài viết trên blog. Nó giúp cho số lượng pageviews trên blog tăng lên đáng kể, mà đây là một trong các yếu tố quyết định đến thứ hạng blog của bạn. Có rất nhiều plugins có thể tạo ra được danh sách này chẳng hạn như: Yet Another Related Post hay nrelate Related Content. Nhưng nhiều bạn thường không thích sử dụng plugins vì nó ảnh hưởng đến tốc độ của blog. Vì vậy, mình sẽ giới thiệu một đoạn code có thể giúp bạn tạo ra danh sách này mà không cần tới plugins. Đây là đoạn code mình đang áp dụng cho blog của mình.

related-post

Các bạn chép đoạn code sau đây vào file functions.php trong theme mà bạn đang sử dụng:

Danh sách bài viết liên quan theo category

function get_samepost_category() {
    $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'=>5,
                'ignore_sticky_posts'=>1,
                'orderby'=>rand);
          $my_query = new wp_query($args);
        endforeach;
        if( $my_query->have_posts() ): 
           if( is_single() ):?>
             <div class="sametitle">Có thể bạn chưa xem</div>
             <div class="same"> 
              <ul>
               <?php while ($my_query->have_posts()): 
                     $my_query->the_post();?>
                     <li>
                       <a href="<?php the_permalink() ?>" rel="bookmark" title="<?php the_title_attribute(); ?>"><?php the_title(); ?></a>
                     </li>
               <?php endwhile; ?>
              </ul>
             </div>
 <?php  endif; endif; endif; wp_reset_query(); }

Danh sách bài viết liên quan theo tag

function get_samepost_tag() {
		$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, 
			'ignore_sticky_posts' => 1,
                        'orderby'=>rand);
			$related_query = new WP_Query($args);
			if ($related_query->have_posts()) :
	          if( is_single() ):?>
				<div class="sametitle">Các bài viết liên quan</div>
				<div class="same"> 
				<ul>
				<?php while ($related_query->have_posts()): 
						$related_query->the_post(); ?>
						<li>
						<a href=”<?php the_permalink() ?>” > <?php the_title();?> </a>
						</li>
				<?php endwhile; ?>
				</ul>
				</div>
<?php  endif; endif; endif; wp_reset_query(); }

Tiếp theo, mở file single.php và thêm đoạn code:

<?php get_samepost_category(); ?>

hoặc

<?php get_samepost_tag(); ?>

vào vị trí mà bạn muốn hiển thị danh sách bài viết liên quan, thường là ngay phía sau đoạn code

<?php the_content(); ?>

Đối với các bạn sử dụng Genesis, bạn không sử dụng file single.php mà sẽ thêm đoạn code này vào ngay phía trên code lúc nãy:

add_action( 'genesis_after_post_content', 'get_samepost_category' );

Các bạn có thể vào file style.css, bổ sung thêm các lớp .sametitle và .same cho phù hợp với blog của bạn.

Chúc bạn thành công! {c1}

Code tạo danh sách bài viết liên quan trong WordPress
5 (100%) 1 vote

Tìm trên Google
  • hiện bài viết cùng tag wordpress genesis
  • tao bai viet lien quan kem hinh anh bang code

Chú ý - WordPress Hosting 1$/tháng - miễn phí tên miền

Bạn có biết GoDaddy đang có khuyến mãi WordPress hosting chỉ còn 1$/tháng kèm theo một tên miền .COM .NET .ORG miễn phí. Hãy đăng ký ngay để tiết kiệm chi phí nhất nhé.
Xem ngay

ĐĂNG KÝ NHẬN TIN QUA EMAIL

Nếu thấy bài viết trên blog có ích cho bạn, hãy đăng ký nhận tin qua email để cập nhật bài viết mới nhanh nhất và thỉnh thoảng nhận quà bất ngờ!

Comments

  1. Hoang Phuc says:

    Bạn có biết code nào tạo bài viết liên quan custom post type và custom taxanomy không? Mình tìm mãi mà không ra {c26}

    • Cái này khó đây, bạn thử hỏi các cao thủ xem nhé, mình còn gà lắm {c14}

    • Site mình cũng dùng chủ yếu là Custom Post Type và Custom Taxonomy, tìm mãi chả thất code bài viết liên quan cho iem nó (vì đa số chỉ hỗ trợ Post mặc định của WP) đành dùng plugin Better Related Content chạy ngon lành {c2}

  2. Mình đang phân vân giữa plugin và code.
    Cảm ơn vì bài viết!

  3. có sử dụng được cho thesis 2 không Rayno?

  4. Thanks bạn Thạch rất nhiều code của bạn rất hay và mình đã làm được. Thanks nhiều nhé bạn 😀

    • Mình là bảo chớ ko phải thạch bạn ơi {c26}

    • Trời, bác này vào blog nào cũng khoogn biết nữa. Chắc fan cuồng mất thôi. thachpham cũng là blog rất hay. Nhưng Raynoblog cũng có phong cách riêng,mình nghĩ bạn cố tình nhầm chăng ?
      ps: Bác Bảo có thể làm một serie về tự thiết kế một Child theme genesis được không. ? em đang rất mong chờ cái đó/ Muốn tự làm một cái riêng riêng. Hôm rồi vào Doc của studiopress cơ mà mình dùng hàng share nên không có được xem tài liệu hướng dẫn build theme genesis. Rất mong bác là một cầu nỗi bloger Việt Với genesis. Vì em thấy hiện tại thì Blog bác là chuyên về về Genesis lớn nhất mà em biết

  5. Rocket Video Ranker 3.0 says:

    Toẹt vời ông mặt trời chủ thớt ạ!! 😀 {c1} {c1}

  6. Sau một thời gian dùng code của bạn mình thấy có 1 nhược điểm:
    – Bài viết liên quan không thay đổi khi chuyển sang bài viết khác cùng chuyên mục
    – Trong list bài viết liên quan vẫn xuất hiện bài viết đang xem
    Xin hỏi bạn: Có cách nào khắc phục được tình trạng trên không?
    Cảm ơn bạn.

  7. Lê Uy viễn says:

    Mình sử dụng genesis, tạo “Danh sách bài viết liên quan theo category” theo cách của bài thì ok rồi.
    Nhưng mình muốn ” Danh sách bài viết liên quan theo tag” , làm theo như bạn hướng dẫn thì ko hiện ra đc các bài viết có tag liên quan. Bạn có thể giúp mình

    • Nguyên nhân có thể do bạn đặt tag bài viết không liên quan với nhau nên ko xuất ra được, bạn thử kiểm tra lại xem nhé

  8. Mình sử dụng genesis nhưng khi mở file fusion.php nhiều nhiều chổ quá mình không bik paste vào đâu bạn àh! Bạn có thể hướng dẫn chổ mình paste đoạn code đấy vào được không. thanks nhiều

  9. Thanks. Đã thử và thành công.

  10. cho mình hỏi. muốn show tất cả các tag, danh mục, bài viết, thì làm thế nào bạn Rayno?

  11. nhìn code của bác em cũng hiểu được chút chút. bây giờ nếu muốn thay mấy cái của bác thành của em thì thay đổi chỗ Có thể bạn chưa xem thôi ạ

  12. cái này hình như ko có hình ảnh thì phải
    Căn hộ phú mỹ

  13. tvphuong41 says:

    Ko xài được cái theo tag. Đã test
    Notice: Undefined variable: post in …
    Notice: Trying to get property of non-object in …

  14. Vinh Dương says:

    Bạn ơi, mình dùng genesis, mình làm không được, bạn hướng dẫn chi tiết hơn được ko ?

  15. thank bài viết nhé mình có chỗ vẫn chưa hiểu 🙁 {c26}

  16. Lại Văn Đức says:

    Chào bạn . tớ Coppy đoạn code trên vào functions.php thì bị trắng trang. Giúp tớ nhé, Thanks Bạn

  17. nhìn cũng lằng nhằng nhỉ, dùng plugin được ko?

  18. langtuhoabinh says:

    anh ơi làm thế nào để hiện bài viết nổi bật ? chỉ cho em với

  19. bạn có thê viết code này dưới dạng widget đê kéo vào có thê tùy chinh số lượng bài viết liên quan được không?

  20. ad ơi, ad hướng dẫn cho mình cách chèn phần đăng ký nhận bản tin qua email dưới bài viết như của bạn được không , mình dùng theme genesis.

    • Đây là code của mình, bạn thay link trong code trên bằng link feedburner của bạn nhé.

      /*----------------------dang ky nhan tin--------------------------------------------*/
      add_action('genesis_after_post_content','rayno_sub_form');
      function rayno_sub_form(){
          if(is_single()){ ?>
      		<div id="sub-form" style="width: 100%; background: #088; padding: 20px 0px 20px 20px;">
              	<p class="sub-title" style="color:#FF0; font-size: 22px; font-weight:bold; margin-bottom: 10px;">ĐĂNG KÝ NHẬN TIN QUA EMAIL</p>
      			<p class="tex" style=" color:#FFF; font-style:italic;">Nếu thấy bài viết trên blog có ích cho bạn, hãy đăng ký nhận tin qua email để cập nhật bài viết mới nhanh nhất và thỉnh thoảng nhận quà bất ngờ!</p>
      			<form style="border:0px solid #ccc;padding:3px;text-align:center;" action="https://feedburner.google.com/fb/a/mailverify" method="post" target="popupwindow" onsubmit="window.open('https://feedburner.google.com/fb/a/mailverify?uri=raynoblog', 'popupwindow', 'scrollbars=yes,width=550,height=520');return true">
          			<div>
      					<input type="text" style="padding:10px; margin: 10px; min-width: 300px;" value="Nhập địa chỉ email của bạn" name="email" class="emailform" id="mce-EMAIL" onfocus="if(this.value==this.defaultValue)this.value='';" onblur="if(this.value=='')this.value=this.defaultValue;"/>
          <div style="position: absolute; left: -5000px;"><input type="hidden" value="raynoblog" name="uri"/>
      					<input type="hidden" name="loc" value="en_US"/></div>
      				    <input type="submit" style="padding: 10px; background: #009B4E; font-weight: bold; color:#FFF;" value="ĐĂNG Kݝ" class="button" />
          			</div>
      			</form>
      		</div><?php 
      	}
      }
  21. Ad ơi giúp mình với, mình đang vọc cái genesis, gặp 1 vấn đề là mình muốn cái trang portfolio ( page_portfolio.php) nó chỉ hiện bài viết theo 1 cataloge cụ thể thôi ( hiện tại nó hiện tất cả bài viết trên trang). Xin giúp mình với. cám ơn bạn nhiều.
    trang mình đang vọc : mobizk/com

  22. Mình vừa lắp thử như bạn hướng dẫn vào theme của mình nhưng khi mình cho vào signger.php thì nó báo trang web này hiện không hoạt động là sao bác nhỉ

  23. Cảm ơn anh. Nhưng cho em hỏi một chút là em muốn đóng khung phần bài viết liên quan thì làm sao ạ?

Gửi bình luận

Lưu ý: Không sử dụng keyword để thay cho tên của bạn, hãy sử dụng tên thật. Cảm ơn bạn đã tham gia bình luận trên blog!