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?
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
Để thêm được taxonomy serial ta thêm đoạn code sau vào file functions.php trong theme của bạn
Để duy trì blog nên mình có làm aff cho 1 số bên hosting. Nhưng dù aff mình cũng chọn 1 số nhà cung cấp uy tín về chất lượng và support nên các bạn cứ yên tâm nhé.
Nếu có mua hosting mà có trong list dưới đây các bạn click vào link trước khi mua để ủng hộ mình nhé. Mình cảm ơn nhiều
- Azdigi: Giá rẻ thì dùng gói Pro Gold Hosting còn chất lượng hơn thì em khuyên dùng Business Hosting. Có điều kiện thì lên VPS nhé
- Tino hosting
- iNet
- Nước ngoài thì Vultr
//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( $postID, '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ị
$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[] = '<a href="'.get_term_link($term).'" title="">' . $term->name .'</a>'; } $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
- Đăng ký taxonomy xem tại đây
- Sử dụng get_the_terms
- WP_Query
Chúc các bạn thành công ^^
- Bình luận