Hiển thị các bài viết trong cùng serial không dùng plugin

Cập nhật lần cuối 16/03/2017 by trong WordPress vào 29/11/2013 có 968 Views

Khi các bạn viết blog chia sẻ, hay viết các bài hướng dẫn thường thì sẽ có nhiều bài viết cho phần nào đó. Vậy để hiển thị các bài viết cùng serial thì làm theo hướng nào và làm như nào?

Hiển thị các bài viết trong cùng serial

Hiển thị các bài viết trong cùng serial

Trong bài này mình sẽ làm theo hướng là tạo ra 1 taxonomy nữa (với tên serial_post) và sẽ tạo các series bài viết khác nhau trong đây. Và dưới đây là cách làm

Thêm taxonomy seri

Hiển thị các bài viết trong cùng serial

Hiển thị các bài viết trong cùng serial

Để thêm được taxonomy serial ta thêm đoạn code sau vào file functions.php trong theme của bạn


//Add Serial post
add_action( 'init', 'create_serial_post_tax' );

function create_serial_post_tax() {
 $labels = array(
 'name' => _x( 'Series', 'taxonomy serial name' ),
 'singular_name' => _x( 'Series', 'taxonomy singular name' ),
 'search_items' => __( 'Tìm kiếm Series' ),
 'all_items' => __( 'Toàn bộ Series' ),
 'parent_item' => __( 'Parent Series' ),
 'parent_item_colon' => __( 'Parent seri:' ),
 'edit_item' => __( 'Sửa seri' ),
 'update_item' => __( 'Cập nhật Seri' ),
 'add_new_item' => __( 'Thêm seri' ),
 'new_item_name' => __( 'Tên seri mới' ),
 'menu_name' => __( 'Series' ),
 );
 register_taxonomy(
 'serial_post',
 'post',
 array(
 'labels' => $labels,
 'rewrite' => array( 'slug' => 'serial_post' ),
 'hierarchical' => true,
 )
 );
}

Tiếp theo để hiện thị ở ngoài trang quản trị thì ta thêm đoạn code sau.


add_filter('manage_posts_columns', 'serial_column');
add_action('manage_posts_custom_column', 'serial_column2',5,2);

function serial_column($defaults){
 $defaults['serial'] = __( 'Trong serial' , '' );
 return $defaults;
}
function serial_column2($column_name, $id){
 if( $column_name === 'serial' ) {
 $postID= get_the_ID();
 $terms = get_the_terms( $post->ID, 'serial_post' );
 if ( $terms && ! is_wp_error( $terms ) ) :
 $draught_links = array();
 foreach ( $terms as $term ) {
 $draught_links[] = '<a href="?serial_post='.$term->slug.'">'.$term->name.'</a>';
 }
 $out_serial = implode(', ',$draught_links);
 endif;
 echo $out_serial;
 }
}

Hiển thị Series ra trang single

Để hiển thị các bài trong cùng 1 seri thì bạn thêm đoạn code sau vào file single.php chỗ mà bạn muốn nó hiển thị


<?php
 $postID= get_the_ID();
 $terms = get_the_terms( $postID, 'serial_post' );
 if ( $terms && ! is_wp_error( $terms ) ) :
 $draught_links = array();
 $draught_links2 = array();
 foreach ( $terms as $term ) {
 $draught_links[] = $term->slug;
 $draught_links2[] = $term->name;
 }
 $out_name = implode(', ',$draught_links2);
 endif;
 $array = array(
 'post_type'=>'post',
 'order'=>ASC,
'posts_per_page'=>-1,//Hiển thị toàn bộ bài viết trong cùng serial
 'tax_query' =>array(
 array(
 'taxonomy'=>'serial_post',
 'field' => 'slug',
 'terms'=>$draught_links
 )
 )

 );
 $q = new WP_Query($array);
 $count = $q->post_count;
 if($q->have_posts()):
 echo '<div class="serial_svl">';
 echo '<p>Có '.$count.' bài viết trong serial: '.$out_name.'</p>';
 echo '<ul>';
 while($q->have_posts()):$q->the_post();
 $idpost=get_the_ID();
 ?>
 <?php if($postID==$idpost):?>
 <li><?php the_title();if($postID==$idpost) echo "(bạn đang xem)";?></li>
 <?php else:?>
 <li><a href="<?php the_permalink();?>"><?php the_title();?></a></li>
 <?php endif;?>
 <?php endwhile;
 echo '</ul></div>';
 endif;
 wp_reset_postdata();
 wp_reset_query();
 ?>

Nhớ là trong vòng while() nhé ^^

Kiến thức cần biết

  1. Đăng ký taxonomy xem tại đây
  2. Sử dụng get_the_terms
  3. WP_Query

Chúc các bạn thành công ^^

Hiển thị các bài viết trong cùng serial không dùng plugin
5 (100%) 1 vote
  • Bình luận
Có thể bạn quan tâm
x