Hướng dẫn tạo danh sách loạt bài Series trong WordPress

Hướng dẫn tạo danh sách loạt bài Series trong WordPress
     

Nếu bạn là một blogger, chắc hẳn sẽ rất nhiều lần bạn tạo ra các bài viết trong một series, các bài này được chia thành các phần và chúng nằm trong 1 danh mục. Tuy nhiên nó dễ dàng bị lẫn lộn do với các bài viết khác trong danh mục. Để khắc phục điều đó. Hôm nay trong bài viết này, mình sẽ hướng dẫn bạn cách để tạo danh sách loạt bài Series trong WordPress.

Tạo taxonomy lưu trữ

Cũng như danh mục hay các dạng “Archive” khác, để lưu trữ loạt bài series, mình cần tạo ra một Taxonomy để lưu trữ những bài trong cùng series. Bạn thêm đoạn code sau vào file functions.php

function custom_taxonomy() {
    $label = array('name' => 'Các Series', 
                   'singular' => 'Series bài viết', 
                   'menu_name' => 'Series bài viết', 
                   'edit_item' => 'Chỉnh sửa Series', 
                   'add_new_item' => 'Thêm Series mới', 
                   'search_items'=> 'Tìm kiếm Series', 
                   'popular_items'=> 'Series phổ biến', 
                   'separate_items_with_commas'=> 'Thêm Series, phân tách bởi dấu phẩy', 
                   'choose_from_most_used'=> 'Chọn Series phổ biến', 
                   'not_found'=> 'Không có Series bài viết nào'); 
     $arr = array('labels' => $label, 
                  'hierarchical' => true, 
                  'public' => true, 
                  'show_ui' => true, 
                  'show_admin_column' => true, 
                  'show_in_nav_menus' => true, 
                  'show_tagcloud' => true,);
   register_taxonomy('series', 'post', $arr ); 
} 
add_action( 'init', 'custom_taxonomy');

Bạn có thể xem chi tiết cách tạo Taxonomy tại Hướng dẫn Custom Taxonomy trong WordPress để tùy biến Taxonomy theo hướng phù hợp của bạn.

Một taxonomy Series được tạo

Một taxonomy Series được tạo

Như vậy là mình đã tạo xong Taxonomy Series để lưu trữ các bài viết trong một Series rồi.

 

Tạo metabox nhập thứ tự bài viết

Thật ra phần này cũng không cần thiết lắm, vì nếu như bạn tạo các bài viết theo thứ tự thì bạn có sẽ sử dụng sắp xếp của WordPress. Tuy nhiên trong một số trường hợp Series bài viết của bạn có thể bị sắp xếp lộn. Giả sử mình viết 10 bài cho một series theo thứ tự. Tuy nhiên vì một lý do nào đó mình phải bổ sung thêm một bài viết vào giữa trước bài số 9 và bài số 10 thì hàm truy vấn sẽ khó giải quyết được.

Để khắc phục điều đó thì mình sẽ tạo ra một metabox để lưu trữ số thứ tự của bài viết này trong Series. Mình nghĩ điều này sẽ không làm lớn cơ sở dữ liệu mà dễ dàng cho việc truy vấn sau này nữa.

Bạn có thể sử dụng đoạn code tạo metabox sau:

function order_number_meta_box(){ 
   add_meta_box( 'order-number', 'Thứ tự bài viết trong Series', 'form_order_number', 'post' );
 }
add_action( 'add_meta_boxes', 'order_number_meta_box' );
function form_order_number($post){ 
   $order_number = get_post_meta( $post->ID, '_order_number', true );
   wp_nonce_field( 'save_order_number', 'order_number_nonce' ); 
   echo ( '<label for="order_number">Số thứ tự (Nếu không có trong series, vui lòng để trống): </label>' ); echo ('<input type="number" id="order_number" name="order_number" value="'.esc_attr( $order_number ).'" />');
 }
function order_number_save( $post_id ){ 
    $order_number_nonce = $_POST['order_number_nonce']; 
    if( !isset( $order_number_nonce ) ) { return; } 
    if( !wp_verify_nonce( $order_number_nonce, 'save_order_number' ) ) { return; } 
    $order_number = sanitize_text_field( $_POST['order_number'] ); 
    update_post_meta( $post_id, '_order_number', $order_number );
 }
add_action( 'save_post', 'order_number_save' );

Bạn có thể tham khảo chi tiết cách tại Metabox tại bài viết Hướng dẫn tạo Meta Box trong WordPress, để hiểu rõ hơn cách tạo Metabox.

Kết quả khi tạo metabox

Kết quả khi tạo metabox

Hiển thị nút điều hướng bài viết

Trước khi làm tiếp mình phải tạo ta một Series và đưa các bài viết vào Series đó trước đã. Ở đây mình sử dụng các bài viết trong một series sẵn.

Các bài viết được nhóm trong một Series.

Các bài viết được nhóm trong một Series.

Bây giờ bạn thêm đoạn code sau vào dưới phần nội dung của file single.php

<?php 
 
 $series = get_the_terms( $post->ID, 'series' ); 
 foreach($series as $serie){ 
  if (!empty($serie))
  {
    $post_order_current = get_post_meta( $post->ID, '_order_number', true );
    $post_order_before;
    $post_order_after;
    if (!empty($post_order_current))
     {
      $post_order_before = $post_order_current - 1;
      $post_order_after = $post_order_current + 1;
     }
 echo '<div class="post-series">';
 
 $args = array('post_type' => 'post',
               'tax_query' => array(
                                    array(
                                          'taxonomy' => 'series',
                                          'field' => 'term_id',
                                          'terms' => $serie->term_id
                                          )
                                    )
              );
    $query = new WP_Query( $args ); 
    while ($query->have_posts()) : $query->the_post(); 
      $ordershow = get_post_meta( $post->ID, '_order_number', true );
      if ($ordershow == $post_order_before) {
          echo '<a style="float: left;max-width: 48%;" href="'.get_the_permalink().'"><i class="fa fa-angle-left" aria-hidden="true"></i> '.get_the_title().'</a>';
      }
      if($ordershow == $post_order_after)
      {
          echo '<a style="float: right;max-width: 48%;" href="'.get_the_permalink().'">'.get_the_title().' <i class="fa fa-angle-right" aria-hidden="true"></i></a>';
      }
    endwhile ; wp_reset_query();
  echo '</div>';
  break;
  }
 } 
?>

Và dưới đây là kết quả khi tạo xong.

Kết quả sau khi tạo.

Kết quả sau khi tạo.

Bạn nên làm điều này trước khi bắt tay vào viết Blog, điều này giảm tải việc chỉnh sửa lại mất thời gian giống mình. Chúc bạn thành công.

TUANDC

Liên hết bài viết: ""

Các bài liên quan