Trong WordPress, có hai loại nội dung bạn được cung cấp sẵn đó là Page và Post. 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
và $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:
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ỉ.
Đế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ướ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:
- Meta Box plugin: đây là framework để cho MB Custom Post Type có thể hoạt động
- MB Custom Post Type: sử dụng để tạo post type
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é.
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é.
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é:
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.
Còn ở khu vực Generate Code, có sẵn 2 mục là Function name và Text 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.
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é:
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.
4 bình luận
Precisely what I was searching for, appreciate it for posting.
Thank you.
Thank you for some other informative web site. The place else may I am getting that kind of info written in such a perfect manner?
I’ve a challenge that I’m just now running on, and I’ve
been at the look out for such information.
Thank you.! <3