Giới thiệu về Custom Post Types trong WordPress
WordPress không chỉ là một nền tảng blog đơn thuần. Với khả năng mở rộng mạnh mẽ, WordPress cho phép bạn tạo ra những loại nội dung khác nhau, vượt ra ngoài giới hạn của bài viết (Posts) và trang (Pages) mặc định. Đây chính là lúc Custom Post Types (CPTs) trở nên vô cùng hữu ích. CPTs cho phép bạn định nghĩa các loại nội dung đặc biệt, phù hợp với nhu cầu riêng của website bạn.
Ví dụ, nếu bạn đang xây dựng một website về bất động sản, bạn có thể tạo một CPT “Nhà đất” (Properties) với các thuộc tính riêng như diện tích, giá, địa chỉ, số phòng ngủ, v.v. Hoặc nếu bạn quản lý một trang web về ẩm thực, bạn có thể tạo một CPT “Công thức” (Recipes) với các thông tin như nguyên liệu, cách chế biến, thời gian chuẩn bị, v.v.
Tại sao nên sử dụng Custom Post Types?
Việc sử dụng Custom Post Types mang lại rất nhiều lợi ích cho việc quản lý và hiển thị nội dung trên website WordPress của bạn:
- Tổ chức nội dung tốt hơn: CPTs giúp bạn phân loại và tổ chức nội dung một cách rõ ràng và có cấu trúc.
- Dễ dàng quản lý: Với CPTs, bạn có thể quản lý các loại nội dung khác nhau một cách độc lập, không bị lẫn lộn với bài viết hoặc trang thông thường.
- Hiển thị nội dung linh hoạt: Bạn có thể tùy chỉnh giao diện hiển thị của CPTs theo ý muốn, tạo ra những trang hiển thị riêng biệt cho từng loại nội dung.
- SEO tốt hơn: CPTs giúp bạn tối ưu hóa SEO cho từng loại nội dung cụ thể, cải thiện thứ hạng tìm kiếm của website.
- Khả năng mở rộng cao: CPTs có thể được kết hợp với các Custom Fields (meta boxes) để lưu trữ thông tin chi tiết cho từng mục nội dung.
Cách tạo Custom Post Types trong WordPress
Có nhiều cách để tạo Custom Post Types trong WordPress. Bạn có thể sử dụng plugin, viết code trực tiếp trong file functions.php của theme, hoặc sử dụng child theme để tránh ảnh hưởng đến theme gốc.
Sử dụng Plugin
Đây là cách đơn giản nhất và được nhiều người sử dụng. Một số plugin phổ biến để tạo CPTs bao gồm:
- Custom Post Type UI: Plugin này cung cấp giao diện trực quan để tạo và quản lý CPTs.
- Pods: Pods là một framework mạnh mẽ cho phép bạn tạo CPTs, Custom Fields, và Taxonomies một cách dễ dàng.
- Toolset Types: Toolset Types là một plugin trả phí cung cấp nhiều tính năng nâng cao để quản lý CPTs và Custom Fields.
Trong ví dụ này, chúng ta sẽ sử dụng plugin Custom Post Type UI để tạo một CPT có tên là “Sản phẩm” (Products).
- Cài đặt và kích hoạt plugin Custom Post Type UI.
- Trong trang quản trị WordPress, vào “CPT UI” -> “Add/Edit Post Types”.
- Nhập “sản phẩm” (products) vào ô “Post Type Slug”. Lưu ý: slug phải là chữ thường và không có khoảng trắng.
- Nhập “Sản phẩm” (Products) vào ô “Plural Label” và “Sản phẩm” (Product) vào ô “Singular Label”.
- Nhấn “Add Post Type” để tạo CPT.
Sau khi tạo CPT, bạn sẽ thấy một menu mới “Sản phẩm” (Products) xuất hiện trong trang quản trị WordPress. Bạn có thể thêm, chỉnh sửa và quản lý các sản phẩm giống như cách bạn làm với bài viết thông thường.
Viết Code trong functions.php
Nếu bạn có kiến thức về lập trình PHP, bạn có thể tạo CPTs bằng cách viết code trực tiếp trong file functions.php của theme. Cách này cho phép bạn kiểm soát hoàn toàn quá trình tạo CPT và tùy chỉnh các thuộc tính nâng cao.
Ví dụ, đoạn code sau tạo một CPT có tên là “Dự án” (Projects):
<?php
function create_project_post_type() {
$labels = array(
'name' => _x( 'Dự án', 'Post Type General Name', 'textdomain' ),
'singular_name' => _x( 'Dự án', 'Post Type Singular Name', 'textdomain' ),
'menu_name' => __( 'Dự án', 'textdomain' ),
'name_admin_bar' => __( 'Dự án', 'textdomain' ),
'parent_item_colon' => __( 'Dự án cha:', 'textdomain' ),
'all_items' => __( 'Tất cả Dự án', 'textdomain' ),
'add_new_item' => __( 'Thêm Dự án mới', 'textdomain' ),
'add_new' => __( 'Thêm mới', 'textdomain' ),
'new_item' => __( 'Dự án mới', 'textdomain' ),
'edit_item' => __( 'Chỉnh sửa Dự án', 'textdomain' ),
'update_item' => __( 'Cập nhật Dự án', 'textdomain' ),
'view_item' => __( 'Xem Dự án', 'textdomain' ),
'search_items' => __( 'Tìm kiếm Dự án', 'textdomain' ),
'not_found' => __( 'Không tìm thấy Dự án', 'textdomain' ),
'not_found_in_trash' => __( 'Không tìm thấy Dự án trong thùng rác', 'textdomain' ),
);
$args = array(
'label' => __( 'Dự án', 'textdomain' ),
'description' => __( 'Các dự án của công ty', 'textdomain' ),
'labels' => $labels,
'supports' => array( 'title', 'editor', 'thumbnail', 'excerpt', 'custom-fields', 'revisions', 'author', 'comments', 'page-attributes', ),
'taxonomies' => array( 'category', 'post_tag' ),
'hierarchical' => false,
'public' => true,
'show_ui' => true,
'show_in_menu' => true,
'menu_position' => 5,
'show_in_admin_bar' => true,
'show_in_nav_menus' => true,
'can_export' => true,
'has_archive' => true,
'exclude_from_search' => false,
'publicly_queryable' => true,
'capability_type' => 'page',
);
register_post_type( 'project', $args );
}
add_action( 'init', 'create_project_post_type', 0 );
?>
Lưu ý quan trọng: Khi chỉnh sửa file functions.php, bạn nên sử dụng child theme để tránh mất các thay đổi khi theme được cập nhật.
Giải thích Code
Đoạn code trên thực hiện các công việc sau:
- Định nghĩa mảng
$labels: Mảng này chứa các nhãn (labels) hiển thị trên trang quản trị WordPress cho CPT “Dự án”. - Định nghĩa mảng
$args: Mảng này chứa các thuộc tính của CPT, bao gồm: label: Tên hiển thị của CPT.description: Mô tả của CPT.labels: Mảng các nhãn đã định nghĩa.supports: Các tính năng được hỗ trợ bởi CPT (ví dụ: title, editor, thumbnail).taxonomies: Các taxonomy được liên kết với CPT (ví dụ: category, post_tag).hierarchical: Xác định xem CPT có cấu trúc phân cấp hay không (giống như trang).public: Xác định xem CPT có hiển thị công khai hay không.show_ui: Xác định xem CPT có hiển thị trên trang quản trị WordPress hay không.menu_position: Vị trí của menu CPT trên trang quản trị WordPress.has_archive: Xác định xem CPT có trang lưu trữ (archive page) hay không.- Gọi hàm
register_post_type(): Hàm này đăng ký CPT với WordPress. Tham số đầu tiên là slug của CPT ('project'), tham số thứ hai là mảng các thuộc tính ($args). - Gọi hàm
add_action(): Hàm này gắn kết hàmcreate_project_post_type()với hookinit. Điều này đảm bảo rằng CPT được đăng ký khi WordPress khởi động.
Hiển thị Custom Post Types trên Website
Sau khi tạo CPT, bạn cần hiển thị chúng trên website của mình. Có nhiều cách để thực hiện việc này:
- Sử dụng template files: WordPress sử dụng hệ thống template files để hiển thị nội dung. Bạn có thể tạo các template files riêng cho CPTs của mình để tùy chỉnh giao diện hiển thị. Ví dụ, bạn có thể tạo file
single-project.phpđể hiển thị một dự án cụ thể vàarchive-project.phpđể hiển thị danh sách các dự án. - Sử dụng WordPress Loop: Bạn có thể sử dụng WordPress Loop để truy vấn và hiển thị các CPTs trên trang chủ hoặc bất kỳ trang nào khác.
- Sử dụng plugin page builder: Nhiều plugin page builder (ví dụ: Elementor, Beaver Builder) cho phép bạn hiển thị CPTs một cách dễ dàng thông qua giao diện kéo thả.
Ví dụ, để hiển thị danh sách các “Dự án” (Projects) trên trang chủ, bạn có thể thêm đoạn code sau vào file index.php của theme:
<?php
$args = array(
'post_type' => 'project',
'posts_per_page' => 10,
);
$the_query = new WP_Query( $args );
if ( $the_query->have_posts() ) {
echo '<h2>Các dự án mới nhất</h2>';
while ( $the_query->have_posts() ) {
$the_query->the_post();
echo '<h3><a href="' . get_permalink() . '">' . get_the_title() . '</a></h3>';
echo '<p>' . get_the_excerpt() . '</p>';
}
wp_reset_postdata();
} else {
echo '<p>Không có dự án nào được tìm thấy.</p>';
}
?>
Kết luận
Custom Post Types là một công cụ mạnh mẽ giúp bạn mở rộng khả năng của WordPress và tạo ra những website phức tạp hơn. Bằng cách sử dụng CPTs, bạn có thể tổ chức nội dung tốt hơn, quản lý dễ dàng hơn và hiển thị nội dung một cách linh hoạt hơn. Cho dù bạn là một nhà phát triển chuyên nghiệp hay chỉ là một người dùng WordPress thông thường, việc tìm hiểu và sử dụng CPTs sẽ mang lại nhiều lợi ích cho website của bạn.
