Custom Post Types (CPT) là một trong những khái niệm quan trọng và mạnh mẽ nhất khi bạn muốn xây dựng các trang web WordPress chuyên nghiệp, không chỉ là một blog đơn thuần.
Dưới đây là giải thích chi tiết về CPT, vai trò của nó và cách bạn có thể tạo chúng.
Theo mặc định, WordPress có 5 loại bài đăng chính:
Cách thực hiện (với CPT UI):
Phương pháp 2: Viết Code vào file
Phương pháp này dành cho những người muốn có quyền kiểm soát hoàn toàn và không muốn phụ thuộc vào plugin. Bạn phải thêm code vào file
PHP
Dưới đây là giải thích chi tiết về CPT, vai trò của nó và cách bạn có thể tạo chúng.
Custom Post Types (CPT) là gì?
Trong WordPress, "Post Type" (Loại bài đăng) là một thuật ngữ dùng để chỉ các loại nội dung khác nhau được lưu trữ trong cơ sở dữ liệu.Theo mặc định, WordPress có 5 loại bài đăng chính:
- Post (
post): Dùng cho các bài viết blog thông thường. - Page (
page): Dùng cho các trang tĩnh (như Trang Giới thiệu, Liên hệ). - Attachment (
attachment): Các tệp media (hình ảnh, video, tài liệu). - Revision (
revision): Các bản nháp lịch sử của bài viết/trang. - Nav Menu Item (
nav_menu_item): Các mục trong menu điều hướng.
Ví dụ về CPT
| Loại Website | CPT cần tạo | Mục đích |
| Bán hàng/E-commerce | product (Sản phẩm) | Quản lý tên, giá, mô tả sản phẩm. |
| Tuyển dụng | job_listing (Tin tuyển dụng) | Quản lý chức danh, yêu cầu, hạn nộp hồ sơ. |
| Bất động sản | property (Bất động sản) | Quản lý địa chỉ, diện tích, số phòng ngủ, giá bán. |
| Phim ảnh | movie (Phim) | Quản lý đạo diễn, diễn viên, ngày phát hành, thể loại. |
🛠Cách tạo Custom Post Types
Có hai phương pháp chính để tạo CPT, tùy thuộc vào sở thích và mức độ can thiệp vào mã nguồn của bạn:Phương pháp 1: Dùng Plugin (Được khuyên dùng cho người mới)
Đây là cách dễ nhất và phổ biến nhất.| Plugin đề xuất | Ưu điểm |
| Custom Post Type UI (CPT UI) | Cung cấp giao diện trực quan trong Dashboard để tạo và quản lý CPT, giúp bạn thiết lập tất cả các tùy chọn mà không cần viết code. |
| Pods | Mạnh mẽ hơn, cho phép tạo CPT, Custom Fields, và Custom Taxonomy. |
- Cài đặt và kích hoạt Plugin CPT UI.
- Truy cập CPT UI > Add/Edit Post Types.
- Nhập các thông tin cần thiết:
- Post Type Slug (Tên kỹ thuật, ví dụ:
san_pham). - Plural Label (Tên số nhiều hiển thị, ví dụ: "Sản phẩm").
- Singular Label (Tên số ít hiển thị, ví dụ: "Sản phẩm").
- Post Type Slug (Tên kỹ thuật, ví dụ:
- Lưu lại, và bạn sẽ thấy mục "Sản phẩm" mới xuất hiện trong Dashboard.
Phương pháp 2: Viết Code vào file functions.php
Phương pháp này dành cho những người muốn có quyền kiểm soát hoàn toàn và không muốn phụ thuộc vào plugin. Bạn phải thêm code vào file functions.php của Theme (tốt nhất là Child Theme).PHP
Mã:
function custom_post_type_phim() {
$labels = array(
'name' => _x( 'Phim', 'Post Type General Name', 'text_domain' ),
'singular_name' => _x( 'Phim', 'Post Type Singular Name', 'text_domain' ),
'menu_name' => __( 'Phim Ảnh', 'text_domain' ),
'all_items' => __( 'Tất cả Phim', 'text_domain' ),
'add_new_item' => __( 'Thêm Phim Mới', 'text_domain' ),
// ... (còn nhiều labels khác)
);
$args = array(
'label' => __( 'Phim', 'text_domain' ),
'labels' => $labels,
'supports' => array( 'title', 'editor', 'thumbnail', 'excerpt' ), // Các tính năng hỗ trợ
'hierarchical' => false, // Có cấu trúc phân cấp như Pages không
'public' => true, // Hiển thị công khai
'show_ui' => true, // Hiển thị trên Dashboard
'show_in_menu' => true,
'menu_position' => 5,
'menu_icon' => 'dashicons-video-alt3', // Icon trên Dashboard
'show_in_admin_bar' => true,
'show_in_nav_menus' => true,
'can_export' => true,
'has_archive' => true, // Cho phép trang lưu trữ (Archive)
'exclude_from_search' => false,
'publicly_queryable' => true,
'capability_type' => 'post',
);
// Hàm đăng ký CPT: register_post_type( $post_type_slug, $args )
register_post_type( 'phim', $args );
}
// Gắn hàm vào Action Hook 'init'
add_action( 'init', 'custom_post_type_phim', 0 );
Custom Taxonomy (Phân loại Tùy chỉnh)
Khi bạn đã tạo CPT, bạn sẽ cần một cách để phân loại chúng. Đó là lúc Custom Taxonomy (Phân loại Tùy chỉnh) xuất hiện.- Tương đương: Taxonomy là Tương đương của
Category(Chuyên mục) vàTag(Thẻ) nhưng dành riêng cho CPT của bạn. - Ví dụ:
- Với CPT
product, bạn có Taxonomy làproduct_category(Danh mục sản phẩm) vàproduct_tag(Thẻ sản phẩm). - Với CPT
movie, bạn có Taxonomy làgenre(Thể loại) vàactor(Diễn viên).
- Với CPT
register_taxonomy).Tại sao CPT lại quan trọng?
- Tổ chức dữ liệu tốt hơn: Nó giữ cho các loại nội dung khác nhau (ví dụ: Sản phẩm và Bài Blog) được tách biệt, giúp quản lý dễ dàng hơn.
- Tùy biến linh hoạt: Bạn có thể thiết lập các trường dữ liệu, quy tắc hiển thị và cấu trúc URL riêng biệt cho từng loại CPT.
- Tách biệt thiết kế: Bạn có thể tạo các tệp Template riêng (ví dụ:
single-phim.phpvàarchive-phim.php) để CPT Phim có giao diện hoàn toàn khác so với Bài viết Blog thông thường.