Thêm custom post status cho bài viết WordPress

6 tháng ago, Hướng dẫn WordPress, Views
Thêm custom post status cho bài viết WordPress

Giới Thiệu Về Custom Post Status Trong WordPress

WordPress cung cấp một hệ thống trạng thái bài viết mặc định, bao gồm các trạng thái như “Đã đăng,” “Nháp,” “Chờ xét duyệt,” và “Riêng tư.” Tuy nhiên, trong nhiều trường hợp, các trạng thái này không đủ đáp ứng nhu cầu quản lý nội dung phức tạp. Ví dụ, bạn có thể muốn đánh dấu một bài viết là “Đang chỉnh sửa,” “Đã lên lịch xuất bản,” hoặc “Cần duyệt pháp lý.” Đó là lúc custom post status trở nên hữu ích.

Custom post status (trạng thái bài viết tùy chỉnh) cho phép bạn tạo ra các trạng thái bài viết riêng, phù hợp với quy trình làm việc và nhu cầu cụ thể của bạn. Điều này giúp bạn tổ chức nội dung hiệu quả hơn, theo dõi tiến độ của từng bài viết, và tùy chỉnh quy trình xuất bản.

Tại Sao Nên Sử Dụng Custom Post Status?

Sử dụng custom post status mang lại nhiều lợi ích, đặc biệt đối với các trang web có nhiều người dùng đóng góp nội dung hoặc có quy trình xuất bản phức tạp. Dưới đây là một số lý do chính:

  • Tổ chức nội dung hiệu quả hơn: Phân loại bài viết theo các trạng thái riêng, giúp bạn dễ dàng tìm kiếm và quản lý nội dung.
  • Theo dõi tiến độ: Biết chính xác một bài viết đang ở giai đoạn nào trong quy trình xuất bản.
  • Tùy chỉnh quy trình xuất bản: Thiết lập quy trình duyệt bài, chỉnh sửa, và xuất bản phù hợp với nhu cầu của bạn.
  • Cải thiện cộng tác: Các thành viên trong nhóm dễ dàng hiểu được trách nhiệm của mình đối với từng bài viết.
  • Báo cáo và thống kê: Dễ dàng tạo báo cáo về số lượng bài viết ở từng trạng thái, giúp bạn đánh giá hiệu quả công việc.

Các Cách Thêm Custom Post Status Vào WordPress

Có một vài cách để thêm custom post status vào WordPress. Bạn có thể sử dụng plugin hoặc viết code trực tiếp vào file functions.php của theme (hoặc child theme). Dưới đây là cả hai cách:

Sử Dụng Plugin

Đây là cách đơn giản và nhanh chóng nhất, đặc biệt nếu bạn không quen với việc viết code. Có nhiều plugin miễn phí và trả phí có thể giúp bạn thêm custom post status một cách dễ dàng. Một số plugin phổ biến bao gồm:

  • Custom Post Status: Plugin này cung cấp giao diện trực quan để tạo và quản lý custom post status.
  • PublishPress Checklists: Plugin này không chỉ cho phép bạn tạo custom post status mà còn cung cấp các tính năng khác như checklist trước khi xuất bản.

Để sử dụng plugin, hãy cài đặt và kích hoạt plugin bạn chọn. Sau đó, tìm đến trang cài đặt của plugin và làm theo hướng dẫn để tạo custom post status của bạn. Thông thường, bạn sẽ cần cung cấp tên, slug (tên duy nhất), và các tùy chọn hiển thị cho trạng thái mới.

Viết Code Trong functions.php

Nếu bạn muốn kiểm soát hoàn toàn quá trình thêm custom post status và không muốn sử dụng plugin, bạn có thể viết code trực tiếp vào file functions.php của theme (hoặc child theme). Cách này đòi hỏi bạn phải có kiến thức cơ bản về PHP.

Dưới đây là ví dụ về code bạn có thể sử dụng để thêm một custom post status có tên “Đang chỉnh sửa”:


function register_my_custom_post_status() {
    register_post_status( 'editing', array(
        'label'                     => _x( 'Đang chỉnh sửa', 'post' ),
        'public'                    => true,
        'exclude_from_search'       => false,
        'show_in_admin_all_list'    => true,
        'show_in_admin_status_list' => true,
        'label_count'               => _n_noop( 'Đang chỉnh sửa (%s)', 'Đang chỉnh sửa (%s)' ),
    ) );
}
add_action( 'init', 'register_my_custom_post_status' );

function add_post_status_in_publish_box(){
    global $post;
    $complete = '';
    $label = '';
    if($post->post_status == 'editing'){
        $complete = ' selected="selected"';
        $label = ' Đang chỉnh sửa';
    }
    echo '
    
        jQuery(document).ready(function($){
            $("select#post_status").append("Đang chỉnh sửa");
        });
    
    ';
    echo  $label;
}
add_action('post_submitbox_misc_actions', 'add_post_status_in_publish_box');

function display_archive_state( $states ) {
     global $post;
     $arg = get_query_var( 'post_status' );
     if($arg != 'editing'){
          if($post->post_status == 'editing'){
               return array('Đang chỉnh sửa');
          }
     }
       return $states;
}
add_filter( 'display_post_states', 'display_archive_state' );

Giải thích code:

  • register_post_status(): Hàm này đăng ký một custom post status mới. Tham số đầu tiên là slug của trạng thái (ví dụ: ‘editing’). Tham số thứ hai là một mảng chứa các thuộc tính của trạng thái, chẳng hạn như nhãn (label), khả năng hiển thị công khai (public), và khả năng hiển thị trong danh sách quản trị (show_in_admin_all_list).
  • add_action( 'init', 'register_my_custom_post_status' ): Dòng này kích hoạt hàm register_my_custom_post_status() khi WordPress khởi tạo.
  • add_post_status_in_publish_box(): Hàm này thêm trạng thái mới vào dropdown danh sách các trạng thái trong metabox xuất bản bài viết.
  • display_archive_state(): Hàm này hiển thị trạng thái tùy chỉnh trong danh sách các bài viết trong khu vực quản trị.

Lưu ý quan trọng:

  • Luôn sử dụng child theme để tránh mất code khi theme gốc được cập nhật.
  • Kiểm tra code cẩn thận trước khi thêm vào file functions.php để tránh gây ra lỗi.
  • Nếu bạn không chắc chắn về việc viết code, hãy sử dụng plugin.

Tùy Chỉnh Hiển Thị Custom Post Status

Sau khi bạn đã thêm custom post status, bạn có thể tùy chỉnh cách hiển thị trạng thái này trong khu vực quản trị. Ví dụ, bạn có thể muốn thêm một cột mới vào danh sách bài viết để hiển thị trạng thái của từng bài viết.

Để làm điều này, bạn có thể sử dụng code sau trong file functions.php:


// Thêm cột trạng thái vào danh sách bài viết
function add_custom_post_status_column( $columns ) {
    $columns['post_status'] = 'Trạng thái';
    return $columns;
}
add_filter( 'manage_posts_columns', 'add_custom_post_status_column' );

// Hiển thị trạng thái trong cột
function display_custom_post_status_column( $column, $post_id ) {
    if ( $column == 'post_status' ) {
        $post_status = get_post_status( $post_id );
        echo ucfirst( $post_status );
    }
}
add_action( 'manage_posts_custom_column', 'display_custom_post_status_column', 10, 2 );

Code này sẽ thêm một cột có tiêu đề “Trạng thái” vào danh sách bài viết và hiển thị trạng thái hiện tại của từng bài viết trong cột đó. Bạn có thể tùy chỉnh code này để hiển thị trạng thái theo cách bạn muốn.

Sử Dụng Custom Post Status Trong Query

Bạn cũng có thể sử dụng custom post status trong các truy vấn WordPress. Ví dụ, bạn có thể muốn hiển thị tất cả các bài viết có trạng thái “Đang chỉnh sửa” trên một trang cụ thể.

Để làm điều này, bạn có thể sử dụng code sau:


$args = array(
    'post_type' => 'post',
    'post_status' => 'editing',
    'posts_per_page' => -1, // Lấy tất cả các bài viết
);

$query = new WP_Query( $args );

if ( $query->have_posts() ) {
    while ( $query->have_posts() ) {
        $query->the_post();
        // Hiển thị nội dung bài viết
        the_title();
        the_content();
    }
    wp_reset_postdata();
} else {
    echo 'Không có bài viết nào có trạng thái "Đang chỉnh sửa".';
}

Code này sẽ tạo một truy vấn để lấy tất cả các bài viết có trạng thái “Đang chỉnh sửa” và hiển thị nội dung của chúng. Bạn có thể tùy chỉnh code này để phù hợp với nhu cầu của bạn.

Kết Luận

Custom post status là một công cụ mạnh mẽ giúp bạn quản lý nội dung WordPress hiệu quả hơn. Bằng cách tạo ra các trạng thái bài viết riêng, bạn có thể tùy chỉnh quy trình xuất bản, theo dõi tiến độ của từng bài viết, và cải thiện cộng tác giữa các thành viên trong nhóm. Cho dù bạn sử dụng plugin hay viết code trực tiếp, việc thêm custom post status là một cách tuyệt vời để nâng cao khả năng quản lý nội dung của trang web WordPress của bạn.