Cách tạo Custom Post Type bằng code và bằng plugin trong WordPress

Cách tạo Custom Post Type bằng code và bằng plugin trong WordPress

Trong WordPress, có hai loại nội dung bạn được cung cấp sẵn đó là PagePost. Loại nội dung là cách gọi tiếng Việt, còn gọi đúng thì nó chính là post type. Vậy nên khi mình nói loại nội dung hay post type thì các bạn hiểu nó là một nhé.

Ngoài 2 loại post type mà WordPress cung cấp mặc định ở trên, thì đôi khi bạn sẽ cần có một post type khác không phải page, cũng chẳng phải post, ví dụ như sản phẩm chẳng hạn. Thì loại post type mà bạn tạo thêm ấy được gọi là custom post type.

Trong bài viết này, mình sẽ hướng dẫn bạn cách tạo custom post type theo 2 cách, 1 là bằng cách tự viết code, 2 là sử dụng plugin. Tất nhiên là sử dụng plugin thì bạn sẽ không cần động vào code đâu.

Vậy hãy cùng xem 2 cách làm này như thế nào nhé.

Cách 1: Tạo custom post type bằng code

Bước 1: Khởi custom post type thủ công

Trong file function.php của theme bạn đang dùng, bạn hook vào action init như sau:

function tao_custom_post_type() {
    $args = array(); 
    register_post_type( 'slug-post-type' , $args );
}
add_action( 'init', 'tao_custom_post_type' );

Trong hàm tao_custom_post_type() này có một hàm register_post_type() là dùng để khởi tạo custom post type. Lúc này, mình vẫn chưa khai báo các tham số của post type này mà chỉ là khởi tạo thôi. Các tham số sẽ được thêm vào ở bước sau.

Bước 2: Khai báo các tham số cho Custom Post Type vừa tạo

Có rất nhiều loại tham số cho một post type và khá là phức tạp. Vì vậy, bạn nên tìm hiểu trước để lựa chọn các tham số phù hợp và cần thiết cho post type của mình để đưa vào. WordPress có danh sách các tham số, biến, … ở đây. Bạn đọc tham khảo thêm để lựa chọn nhé.

Trong bài viết này, mình chỉ hướng dẫn bạn tạo một post type cho sản phẩm đơn giản thôi, nên chỉ sử dụng một vài biến và tham số cơ bản.

Cụ thể như sau:

Vẫn là đoạn code như trên, nhưng ở bước này, mình sẽ bổ sung thêm 2 biến là $label$supports. Ngoài ra, mình sẽ khai báo cụ thể hơn cho biến $args.

Biến $label thực ra là cũng không phải là quá quan trọng đâu, nhưng nó sẽ giúp bạn đặt tên cho post type của bạn để hiển thị ra admin cho dễ.

Biến $supports được dùng là để khai báo rằng post type này của bạn sẽ được hỗ trợ thêm các phần như tiêu đề, chỉnh sửa, mô tả ngắn, hình đại diện, …

Biến $args được sử dụng để chứa toàn bộ các biến mảng trên, đồng thời sẽ chứa thêm một số thuộc tính quan trọng khác nữa của post type.

Bạn có thể tham khảo thêm các tham số và diễn giải cho từng tham số mình thêm vào ở đây.

function tao_custom_post_type() {

    /*
    * Biến $label để khai báo tên hiển thị của Post Type trong Admin
    */
    $label = array(
        'name' => 'Products', //Tên post type dạng số nhiều
        'singular_name' => 'Product' //Tên post type dạng số ít
    );

    /*
    * Biến $supports là để khai báo những thuộc tính có thêm cho post type
    */
    $supports = array(
        'Title', //Hỗ trợ tiêu đề
        'Editor', //Cho phép chỉnh sửa nội dung của post type
        'Excerpt', //Cho phép mô tả ngắn cho post type
        'Author', //Cho phép lựa chọn tác giả
        'Thumbnail', //Cho phép lựa chọn ảnh đại diện
        'Comments', //Cho phép lựa chọn có bật phần bình luận hay không
        'Trackbacks', //Hỗ trợ trackbacks
        'Revisions', //Cho phép hiển thị các bản lưu tự động
        'Custom-fields' //Hỗ trợ các trường tùy chỉnh
    );

    /*
    * Biến $args là những tham số quan trọng trong Post Type
    */
    $args = array(
        'Labels' => $label,
        'description' => 'Post type post product', //Mô tả của post type
        'supports' => $supports,
        'taxonomies' => array( 'category', 'post_tag' ), //Các taxonomy được phép sử dụng để phân loại nội dung
        'hierarchical' => false, //Cho phép phân cấp, nếu đặt là false thì post type này giống như Post, đặt là true thì giống như Page
        'public' => true, //Kích hoạt post type
        'show_ui' => true, //Hiển thị khung quản trị như Post/Page
        'show_in_menu' => true, //Hiển thị trên Admin Menu (tay trái)
        'show_in_nav_menus' => true, //Hiển thị trong Appearance -> Menus
        'show_in_admin_bar' => true, //Hiển thị trên thanh Admin bar màu đen
        'menu_position' => 5, //Thứ tự vị trí hiển thị trong admin menu bên trái
        'menu_icon' => true, //Đường dẫn tới icon sẽ hiển thị, true là giá trị icon mặc định
        'can_export' => true, //Cho phép xuất nội dung bằng Tools -> Export
        'has_archive' => true, //Cho phép lưu trữ (theo ngày, tháng, năm)
        'exclude_from_search' => false, //Loại bỏ khỏi kết quả tìm kiếm
        'publicly_queryable' => true, //Hiển thị các tham số trong query, bạn nên đặt là true để hiển thị giá trị mặc định
        'capability_type' => 'post' //Cho phép đọc, sửa, xóa giống như “Post”
    );

    register_post_type('sanpham', $args); //Tạo post type với slug tên là sanpham và các tham số như khai báo trong biến $args ở trên
}
add_action('init', 'tao_custom_post_type');

Bạn nhớ lưu lại và quay trở ra giao diện admin để kiểm tra nhé. Lúc này bạn sẽ thu được kết quả như ảnh dưới đây:

tab Product xuất hiện khi bạn tạo Custom Post Type bằng Code

Một tab mới có tên là Product sẽ xuất hiện ở thanh menu bên trái. Đây chính là custom post type bạn vừa tạo đấy.

Khi bạn rê chuột vào tab Product này, bạn cũng sẽ thấy các lựa chọn là All Products để xem tất cả các bài viết loại Product, Add new để thêm mới bài viết loại Product, … Cái này giống hệt với 2 loại post type mặc định là Page & Post nhỉ.

bạn đã hoàn thành việc tạo custom post type bằng code

Đến đây là bạn đã hoàn thành việc tạo custom post type bằng code rồi đấy. Mình cùng thử tiếp cách tạo bằng plugin nhé.

Cách 2: Tạo Custom Post Type bằng plugin MB Custom Post Type

Ở đây mình sẽ sử dụng plugin MB Custom Post Type để tạo post type mới. Đây là 1 plugin mở rộng của Meta Box Plugin. Bạn có thể tìm hiểu thêm về Meta Box tại bài viết này nhé.

Bước 1: Cài đặt và kích hoạt các plugin cần thiết

Bạn cần cài đặt 2 plugin sau đây:

Cả 2 plugin này đều miễn phí nhé các bạn và có thể tải trực tiếp từ wordpress.org.

Sau khi cài đặt và kích hoạt cả 2 plugin trên, trong khu vực admin sẽ xuất hiện thêm một menu mới tên là Meta Box. Bạn hãy chọn submenu tên là Post Types nhé.

chọn Post type khi Menu Meta Box xuất hiện sau khi bạn dùng plugin để tạo custom post type

Bước 2: Tạo một custom post type mới

Bạn hãy nhấn vào nút New Post Type, một bảng thông tin sẽ hiện ra với các trường thông tin để bạn điền vào như dưới đây. Bạn hãy điền đầy đủ các thông tin của post type mà bạn muốn tạo nhé.

điền đầy đủ các thông tin của post type mà bạn muốn tạo bằng plugin

Như ở đây thì mình đang tạo 1 post type có tên là Featured Products và có phần slug là featured-product. Phần slug này sau này sẽ được sử dụng để lấy dữ liệu ra ngoài front-end nhé.

Bạn chú ý 2 chỗ mà mình chỉ mũi tên ở đây nhé:

View post on imgur.com

Bạn có thể thêm các tùy chỉnh nâng cao khác cho post type của bạn bằng cách nhấn vào nút Advanced. Một loạt các thông số sẽ hiển thị để bạn chỉnh sửa như dưới đây.

 thêm các tùy chỉnh nâng cao khác cho post type khi tạo bằng plugin

Còn ở khu vực Generate Code, có sẵn 2 mục là Function nameText domain mà WordPress tạo mặc định. Bạn cứ giữ nguyên như mặc định là được, không cần thay đổi gì cả.

Cũng trong giao diện thiết lập các thông số của post type này, có một khu vực nữa là Supports. Bạn hãy lựa chọn các tính năng mà bạn muốn post type này có nhé. Ví dụ như ở đây mình chọn Title, Editor, và Thumbnail. (Cái này giống với các thuộc tính mà bạn khai báo ở biến $supports khi tạo post type bằng code đó).

Bước 4: Lưu và kiểm tra custom post type bạn vừa tạo

Sau khi kết thúc việc thiết lập các thông số cho custom post type của bạn, bạn hãy bấm lưu lại nhé. Ngay khi đó, một đoạn code sẽ được hiển thị ngay phía dưới. Đây chính là đoạn code được tự động sinh ra dựa trên những gì bạn đã thiết lập cho custom post type của bạn đấy, và nó tương ứng đúng với code khi bạn viết thủ công. Bạn có thể copy thẳng đoạn code này từ đây vào file functions.php của theme cũng được.

đoạn code tự động sinh ra sau khi tạo custom post type bằng plugin

Chú ý là sau khi copy đoạn code này vào file functions.php, bạn hoàn toàn có thể tắt (deactivate) plugin MA Custom Post Types. Tức là bạn chỉ cần dùng đoạn code thôi là được. Việc này có thể sẽ giúp website của bạn tải nhanh hơn một chút.

Bây giờ cùng xem lại kết quả nhé:

kết quả khi dùng plugin tạo custom post type

Một tab mới có tên là Featured Products đã xuất hiện trong admin menu rồi.

Cách này thật đơn giản phải không nào? Bạn không cần phải biết nhiều về lập trình nhưng vẫn có thể tự tạo cho mình một custom post type riêng bằng cách sử dụng plugin MB Custom post type như thế này.

Rất hy vọng hai cách làm trên đây sẽ giúp bạn dễ dàng hơn trong việc tạo Custom Post Type. Việc phải viết code có thể sẽ làm bạn cảm thấy khó khăn nếu như bạn không phải một lập trình viên, và khá mất thời gian ngay cả khi bạn rành việc code. Vậy hãy thử làm với plugin nhé. Vừa tiết kiệm thời gian, vừa tiết kiệm công sức cho bạn, mà lại còn miễn phí nữa.

Nếu bạn có bất kỳ thắc mắc nào thì hãy để lại comment nhé. Cảm ơn các bạn đã theo dõi bài viết.

Gửi phản hồi