WordPress Custom Post Type là gì?
WordPress có sẵn hai loại nội dung mặc định là “Bài viết” (Article) và “Trang” (Page), nhưng đôi khi chúng không đáp ứng được những yêu cầu về cấu trúc trang web phức tạp. Tính năng “Loại bài viết tùy chỉnh” (Custom Post Type – CPT) là một trong những tính năng cốt lõi của WordPress, cho phép nhà phát triển tạo ra các loại nội dung mới với cấu trúc dữ liệu, giao diện quản lý và logic hiển thị riêng biệt. Bạn có thể hiểu nó như một “khung” được thiết kế riêng cho từng loại nội dung cụ thể, chẳng hạn như sản phẩm, bộ sưu tập tác phẩm, sự kiện, sách, v.v.
Sau khi bật tính năng CPT (Custom Post Type), trang quản trị WordPress của bạn sẽ tạo ra các mục menu riêng biệt, mỗi mục có chức năng liệt kê, chỉnh sửa và đăng bài tương tự như mô-đun “Bài viết” gốc. Tuy nhiên, dữ liệu của các mục này hoàn toàn tách biệt với dữ liệu của các bài viết và trang thông thường. Ví dụ, một trang web thương mại điện tử có thể sử dụng mô-đun “Bài viết” để đăng các bài blog, đồng thời tạo một CPT có tên “Sản phẩm” để quản lý thông tin về tất cả các sản phẩm. Các mục này không ảnh hưởng lẫn nhau trong quá trình quản trị, và giao diện hiển thị trên trang web có thể được thiết kế theo những phong cách và bố cục khác nhau.
Nói một cách ngắn gọn, CPT (Custom Post Type) đã phá vỡ những hạn chế của WordPress như một nền tảng blog truyền thống, cho phép xây dựng nhiều loại trang web khác nhau như các trang tin tức, cửa hàng trực tuyến, trang web doanh nghiệp, diễn đàn cộng đồng một cách linh hoạt, mà không cần phụ thuộc vào các plugin bên thứ ba phức tạp có thể gây ảnh hưởng đến hiệu suất. Đây là công nghệ then chốt giúp cấu trúc nội dung trang web trở nên rõ ràng và quản lý hiệu quả hơn.
Đọc thêm Tạo website chuyên nghiệp bắt buộc: Hướng dẫn toàn diện về phát triển và tùy chỉnh chủ đề WordPress。
Tại sao nên sử dụng các loại bài viết tùy chỉnh (custom article types)?
Trong quá trình phát triển trang web, việc sắp xếp nội dung một cách hợp lý chính là yếu tố then chốt quyết định sự thành công của dự án. Khi nội dung trang web ngày càng trở nên phức tạp, việc nhồi nhét tất cả thông tin vào các bài viết hoặc trang web sẽ gây ra nhiều vấn đ
Đầu tiên là sự tiện lợi trong quản lý và bảo trì. Khi tất cả nội dung được trộn lẫn với nhau, việc quản trị viên trang web tìm kiếm một mục cụ thể hoặc thực hiện các thao tác hàng loạt trở nên rất khó khăn. Ví dụ, một loại nội dung “sự kiện” có thể bao gồm các trường dữ liệu như “ngày diễn ra sự kiện”, “địa điểm sự kiện”, “liên kết đăng ký”, v.v.; việc quản lý chúng cùng với các bài viết blog thông thường sẽ gây ra sự lộn xộn. Việc tạo ra các loại nội dung riêng biệt (CPT – Content Type) cho từng loại nội dung đó sẽ giúp chúng có những giao diện riêng biệt để đăng, chỉnh sửa và lọc nội dung, từ đó nâng cao đáng kể hiệu quả công việc quản trị từ phía hậu cần.
Tiếp theo là tính rõ ràng và khả năng mở rộng của cấu trúc dữ liệu. Các bài viết và trang trong WordPress sử dụng các bảng dữ liệu và trường dữ liệu chung. Trong khi đó, CPT (Custom Post Type) cho phép bạn định nghĩa các trường riêng biệt cho từng loại nội dung cụ thể (thông qua các trường tùy chỉnh hoặc plugin tùy chỉnh nâng cao); những dữ liệu này có thể được lưu trữ, truy vấn và sử dụng một cách hiệu quả hơn. Ví dụ, một bài viết thuộc loại “phim” trong CPT có thể chứa các trường như “Đạo diễn”, “Thời lượng”, “Điểm đánh giá”, v.v., những thông tin mà trong loại bài viết “bình thường” của WordPress thì không thể được lưu trữ một cách có cấu trúc rõ ràng.
Ngoài ra, còn có tính linh hoạt trong việc hiển thị trên giao diện người dùng (frontend). Bằng cách tạo các tệp mẫu (templates) riêng biệt cho từng loại CPT (Component Pattern Type), chúng ta có thể dễ dàng điều chỉnh cách các thành phần được hiển thị trên trang web tùy theo nhu cầu cụ thể. single-{cpt-slug}.php 和 archive-{cpt-slug}.phpBạn có thể kiểm soát hoàn toàn phong cách trình bày của chúng trên phía trước (frontend), tạo ra những hiệu ứng thiết kế hoàn toàn khác biệt so với các phần khác của trang web, mà không cần phải sử dụng các điều kiện phức tạp để chỉnh sửa một mẫu duy nhất.
Cuối cùng là vấn đề về hiệu năng và tối ưu hóa truy vấn. Khi thực hiện các truy vấn vào cơ sở dữ liệu, việc truy vấn dữ liệu liên quan đến một loại nội dung cụ thể (chẳng hạn như tất cả các “sự kiện” đang chờ xử lý) sẽ hiệu quả hơn nhiều so với việc thực hiện các thao tác lọc dữ liệu trong một bảng lớn chứa đủ loại nội dung khác nhau. Điều này giúp cải thiện tốc độ tải trang và hiệu năng tổng thể của trang web. Đây là một trong những thực hành tốt nhất để nâng cao mức độ chuyên nghiệp và hiệu năng của trang web WordPress từ góc độ kiến trúc.
Làm thế nào để tạo loại bài viết tùy chỉnh?
Có hai phương pháp chính để tạo CPT (Custom Post Type): đăng ký bằng cách viết mã nguồn và sử dụng các plugin chuyên dụng.
Đăng ký bằng mã (phương pháp được khuyến nghị)
Đối với nhà phát triển, thông qua mã code trong chủ đề functions.php Đăng ký CPT (Custom Post Type) trong tệp tin là cách thức minh bạch và dễ kiểm soát nhất. Phương pháp này tận dụng những tính năng mà WordPress cung cấp. register_post_type() Đây là một phương pháp kết hợp các chức năng với các chủ đề hoặc tiện ích mở rộng (plugins) tùy chỉnh. Phương pháp này giúp việc di chuyển dữ liệu trở nên dễ dàng hơn, và dữ liệu sẽ không bị mất đi nếu các tiện ích đó ngừng hoạt động.
Dưới đây là một ví dụ đầy đủ về mã CPT (Content Production Template) được sử dụng để tạo một sản phẩm có tên “Bộ sưu tập tác phẩm” (Portfolio):
function create_portfolio_post_type() {
$labels = array(
'name' => '作品集',
'singular_name' => '作品',
'menu_name' => '作品集',
'add_new' => '添加新作品',
'add_new_item' => '添加新作品',
'edit_item' => '编辑作品',
'new_item' => '新作品',
'view_item' => '查看作品',
'search_items' => '搜索作品',
'not_found' => '未找到作品',
'not_found_in_trash' => '回收站中未找到作品'
);
$args = array(
'labels' => $labels,
'public' => true,
'publicly_queryable' => true,
'show_ui' => true,
'show_in_menu' => true,
'query_var' => true,
'rewrite' => array( 'slug' => 'portfolio' ),
'capability_type' => 'post',
'has_archive' => true,
'hierarchical' => false,
'menu_position' => 5,
'menu_icon' => 'dashicons-format-gallery',
'supports' => array( 'title', 'editor', 'thumbnail', 'excerpt' )
);
register_post_type( 'portfolio', $args );
}
add_action( 'init', 'create_portfolio_post_type' ); Đoạn mã này thông qua $labels Mảng được sử dụng để định nghĩa văn bản hiển thị trên giao diện nền (backend interface). $args Mảng định nghĩa các đặc tính hành vi của CPT (Content Provider Type), chẳng hạn như liệu nó có được truy cập công khai hay không, cũng như các quy tắc đổi đổi địa chỉ URL (URL rewriting rules).slug Đặt thành portfolioCác tính năng được hỗ trợ (tiêu đề, trình soạn thảo, hình ảnh nổi bật, v.v.) cùng với các biểu tượng menu ở phía sau hệ thống. Cuối cùng, hãy sử dụng chúng. add_action() Hook: Được thực thi khi WordPress khởi tạo (initiate), để gọi các hàm đăng ký (registration functions).
Sử dụng plugin để tạo ra.
Đối với những người không quen với mã nguồn, họ có thể sử dụng các plugin để nhanh chóng tạo và quản lý các loại bài viết đặc biệt (Custom Post Types – CPT). Các plugin phổ biến như Custom Post Type UI và Toolset Types cung cấp giao diện người dùng trực quan, cho phép bạn cấu hình tất cả các thông số của CPT chỉ bằng cách nhấp chuột, bao gồm các thẻ (tags), thông số (parameters), và thậm chí hệ thống phân loại tùy chỉnh (custom taxonomies).
Ưu điểm của các phương thức dựa trên plugin là dễ sử dụng và không cần phải tiếp xúc với mã nguồn. Tuy nhiên, nhược điểm là chức năng và hiệu suất của trang web hoàn toàn phụ thuộc vào các plugin. Nếu các plugin đó ngừng được cập nhật hoặc không tương thích với phiên bản cốt lõi của WordPress, điều đó có thể gây ra những rủi ro. Ngoài ra, logic chức năng của trang web được phân tán trong các plugin, điều này không thuận lợi cho việc bảo trì và di chuyển mã nguồn lâu dài. Được khuyên nên sử dụng các plugin trong giai đoạn tạo nguyên mẫu nhanh chóng hoặc cho các dự án không quan trọng.
Tạo mẫu cho loại bài viết tùy chỉnh
Chỉ tạo CPT (Custom Post Type) ở phía backend là chưa đủ; để nội dung của nó được hiển thị trên frontend theo cách mong muốn, bạn cần tạo các tệp mẫu chủ đề (theme templates) tương ứng cho nó. WordPress tuân theo những quy tắc cụ thể về cấu trúc các tệp mẫu để tìm kiếm và sử dụng chúng.
Để có thể kiểm soát hoàn toàn “bộ sưu tập” CPT của bạn, bạn cần tạo ít nhất hai tệp mẫu (template files).
1. Mẫu trang lưu trữ: Dùng để hiển thị danh sách tất cả các tác phẩm. Hãy đặt tên tệp này là… archive-portfolio.php Và đặt nó vào thư mục chủ đề (theme directory) của bạn. WordPress sẽ tự động tìm thấy và sử dụng nó khi bạn truy cập vào trang web của mình. yoursite.com/portfolio/ Trong trường hợp cần thiết, mẫu này sẽ được sử dụng ưu tiên. Bạn có thể sử dụng nó để thực hiện các công việc cần thiết bên trong. WP_Query Hoặc sử dụng vòng lặp chính để lấy và hiển thị tất cả các bài viết thuộc loại “Bộ sưu tập” (Portfolio).
2. Mẫu bài viết đơn lẻ: Dùng để hiển thị trang chi tiết của một tác phẩm cụ thể. Hãy đặt tên tệp này là… single-portfolio.phpKhi truy cập… yoursite.com/portfolio/your-work/ Khi cần hiển thị nội dung, WordPress sẽ gọi đến mẫu này. Bạn có thể tự do thiết kế cấu trúc bên trong của mẫu và sử dụng các trường tùy chỉnh đã được định nghĩa cho loại nội dung này (CPT – Custom Post Type).
Dưới đây là… archive-portfolio.php Một ví dụ về cấu trúc cơ bản:
<?php get_header(); ?>
<section class="portfolio-archive">
<h1>Các tác phẩm của chúng tôi</h1>
<div class="portfolio-items">
<?php if ( have_posts() ) : while ( have_posts() ) : the_post(); ?>
<article class="portfolio-item">
<a href="/vi/</?php the_permalink(); ?>">
<h2><?php the_title(); ?></h2>
</a>
<p><?php the_excerpt(); ?></p>
</article>
<?php endwhile; endif; ?>
</div>
<?php the_posts_pagination(); ?>
</section>
<?php get_footer(); ?> Bằng cách tạo ra những mẫu riêng biệt này, nội dung CPT của bạn sẽ có một “giao diện” (skin) độc đáo, vừa hòa quyện hoàn hảo với các phần khác của trang web vừa giữ được bản sắc riêng.
Tính năng nâng cao và Thực hành tốt nhất (Advanced Features and Best Practices)
Sau khi đăng ký thành công và hiển thị thông tin CPT (Cost Per Task), bạn có thể tối ưu hóa nó thêm nữa bằng cách sử dụng một số tính năng nâng cao và thực hành tốt nhất.
Liên kết với hệ thống phân loại tùy chỉnh
Cũng giống như các bài viết có “mục lục phân loại” và “thẻ gắn nhãn”, CPT (Component Presentation Type) của bạn cũng có thể có hệ thống phân loại riêng. Ví dụ, bạn có thể tạo một hệ thống phân loại “Loại Dự Án” cho “Bộ Sưu Tập Tác Phẩm” (Collection of Works). register_taxonomy() Bạn có thể sử dụng các hàm (functions) để phân loại các tác phẩm thành các nhóm như “Thiết kế web”, “Thiết kế thương hiệu”, “UI/UX”, v.v., giúp việc lọc dữ liệu ở phía trước (frontend) và quản lý dữ liệu ở phía sau (backend) trở nên dễ dàng hơn.
Sử dụng các trường tùy chỉnh nâng cao
Trình soạn thảo bài viết gốc của WordPress không thể đáp ứng được nhu cầu nhập dữ liệu phức tạp. Việc tích hợp các plugin như Advanced Custom Fields (ACF) hoặc Meta Box sẽ giúp bạn tạo ra các nhóm trường trực quan cho loại bài viết đặc biệt (CPT – Custom Post Type) của mình, chẳng hạn như thư viện hình ảnh, bộ chọn (selector), liên kết đến các bài viết khác, bộ chọn ngày tháng, v.v. Điều này sẽ biến loại bài viết đặc biệt đó từ một công cụ đơn giản để đăng bài thành một hệ thống nhập dữ liệu mạnh mẽ và linh hoạt hơn.
Điều chỉnh quy tắc viết lại nội dung và các liên kết cố định (fixed links)
Được thiết lập khi đăng ký CPT. rewrite Các tham số có thể ảnh hưởng đến cấu trúc URL của trang web. Vui lòng đảm bảo rằng sau khi tạo CPT (Custom Post Type), bạn truy cập ngay trang “Cài đặt” -> “Liên kết cố định” (Settings -> Fixed Links) trong WordPress, sau đó nhấp vào nút “Lưu thay đổi” (Save Changes) để cập nhật các quy tắc định tuyến URL. Điều này sẽ giúp cấu trúc URL mới được áp dụng một cách chính xác.
(Xem xét về hiệu suất)
Hãy tránh đăng ký những tính năng không cần thiết cho CPT (chẳng hạn như chức năng bình luận, trích dẫn), và sử dụng chúng một cách hợp lý. WP_Query 的 posts_per_page Và cơ chế đệm (cache), đặc biệt là khi truy vấn một lượng lớn dữ liệu CPT trên trang danh sách. Đối với các truy vấn phức tạp có nhiều mối liên hệ (associated queries), hãy xem xét sử dụng API Transients để lưu trữ dữ liệu đã được xử lý vào bộ đệm.
Tách mã chức năng
Đối với môi trường sản xuất, chúng tôi khuyến nghị mạnh mẽ rằng bạn nên tách đoạn mã dùng để tạo CPT (Custom Post Type) ra khỏi phần mã của chủ đề (theme). functions.php Hãy chuyển những nội dung này ra khỏi chính phần chính của ứng dụng và đưa chúng vào một “tiện ích mở rộng tùy chỉnh” (custom plugin) riêng biệt. Lợi ích của việc này là: ngay cả khi bạn thay đổi giao diện (theme) trong tương lai, các định nghĩa liên quan đến CPT (Custom Post Type) vẫn sẽ được giữ nguyên, dữ liệu không bị mất, và việc phân tách giữa ch
Tóm lại
Việc tùy chỉnh các loại bài viết (custom post types) chính là chìa khóa then chốt để khai thác hết tiềm năng quản lý nội dung mạnh mẽ của WordPress. Bằng cách cho phép bạn tạo ra các cấu trúc dữ liệu và logic hiển thị riêng biệt cho từng loại nội dung khác nhau, WordPress được nâng lên từ một nền tảng blog xuất sắc thành một hệ thống quản lý nội dung đa năng và toàn diện. Dù bạn muốn xây dựng bộ sưu tập tác phẩm, quản lý danh mục sản phẩm, hiển thị danh sách sự kiện, hay phát triển các ứng dụng phức tạp hơn, tính năng CPT (Custom Post Types) đều cung cấp những giải pháp rõ ràng, hiệu quả và dễ bảo trì.
Từ việc đăng ký thông qua mã nguồn hoặc sử dụng các plugin để tạo nội dung, đến việc thiết kế các tệp mẫu riêng biệt, và sau đó mở rộng chức năng bằng cách sử dụng các hệ thống phân loại tùy chỉnh cùng các trường dữ liệu nâng cao, việc nắm vững CPT (Custom Post Types) giúp bạn điều hành WordPress một cách chuyên nghiệp và linh hoạt hơn. Tuân theo các thực hành tốt nhất trong việc tách mã nguồn chứa chức năng khỏi giao diện thiết kế của theme (theme), bạn có thể đảm bảo rằng cấu trúc trang web của mình có tính bảo trì lâu dài và độ ổn định cao, từ đó tạo nền tảng vững chắc cho sự phát triển trong tương lai.
FAQ 常见问题
Việc tạo các loại bài viết tùy chỉnh có ảnh hưởng đến tốc độ trang web không?
Việc tạo ra và sử dụng các loại bài viết tùy chỉnh một cách hợp lý không gây ảnh hưởng tiêu cực đến tốc độ trang web. Thực tế, bằng cách phân loại nội dung, chúng ta có thể thực hiện các truy vấn cơ sở dữ liệu một cách chính xác và hiệu quả hơn, từ đó có thể cải thiện tốc độ tải trang của các trang cụ thể.
Các yếu tố ảnh hưởng đến tốc độ trang web thường bao gồm độ phức tạp của các truy vấn trong các tệp mẫu được viết cho hệ thống CPT (Custom Post Type), sự hiện diện của nhiều hình ảnh chưa được tối ưu hóa, hoặc việc sử dụng các truy vấn phức tạp mà không được lưu trữ trong bộ nhớ (không được đệm). Việc tuân thủ các thực hành tốt nhất về hiệu năng của WordPress, như kiểm soát số lượng truy vấn, sử dụng chức năng phân trang, và kích hoạt chức năng lưu trữ đệm dữ liệu (object caching), là những yếu tố then chốt để đảm bảo trang web hoạt động nhanh chóng và ổn định.
Nếu tôi xóa loại bài viết tùy chỉnh, các bài viết thuộc loại đó có bị mất không?
Điều này phụ thuộc vào cách bạn xóa nó. Nếu bạn chỉ gỡ bỏ đoạn mã liên quan đến việc đăng ký CPT (Custom Post Type) khỏi mã nguồn, hoặc tắt plugin dùng để tạo CPT đó, thì trên giao diện quản trị bạn sẽ không thấy menu quản lý cho loại CPT đó nữa; tuy nhiên, dữ liệu của các bài viết liên quan đến CPT vẫn sẽ còn tồn tại trong WordPress. wp_posts Trong bảng cơ sở dữ liệu, chỉ có… post_type Các giá trị trường (chẳng hạn như “portfolio”) không còn được phiên bản cốt lõi của WordPress coi là các loại dữ liệu công khai hợp lệ nữa.
Trong trường hợp này, bạn có thể khôi phục quyền truy cập bằng cách sửa đổi mã nguồn để đăng ký lại các bài viết có tên CPT trùng lặp. Trong những trường hợp nghiêm trọng, bạn cũng có thể thực hiện việc này một cách thủ công bằng cách truy vấn cơ sở dữ liệu. post_type Hãy quay lại sử dụng thuật ngữ “post” hoặc “page”. Đây là một lời cảnh báo quan trọng: Trước khi thực hiện bất kỳ thay đổi cấu trúc nào quan trọng (chẳng hạn như xóa một CPT một cách vĩnh viễn), hãy đảm bảo sao lưu cơ sở dữ liệu của bạn.
Làm thế nào để thêm các trường tùy chỉnh cho các loại bài viết tự định?
Có hai phương pháp chính để thêm các trường tùy chỉnh (custom fields) cho CPT (Custom Post Type). Phương pháp đầu tiên là sử dụng bảng điều khiển “Trường tùy chỉnh” (Custom Fields) có sẵn trong WordPress, tuy nhiên giao diện của nó khá đơn giản và chức năng hạn chế, không phù hợp với những yêu cầu phức tạp. Phương pháp thứ hai, cũng là phương pháp được khuyến nghị, là sử dụng các plugin quản lý trường tùy chỉnh của bên thứ ba như Advanced Custom Fields (ACF) hoặc Meta Box.
Những plugin này cung cấp giao diện trực quan, cho phép bạn tạo các nhóm trường (ví dụ: “Thông tin sản phẩm”) và gán chúng cho các loại sản phẩm cụ thể (CPT – Product Category Terms). Sau đó, bạn có thể thấy những ô nhập trường này trên trang chỉnh sửa của loại sản phẩm đó. Trong các mẫu giao diện (frontend templates), bạn có thể sử dụng các hàm được cung cấp bởi plugin (chẳng hạn như các hàm của ACF – Advanced Custom Fields). get_field()Bạn có thể dễ dàng truy cập và hiển thị giá trị của các trường này bằng cách sử dụng phương thức tương ứng.
Các loại bài viết tùy chỉnh có thể được sử dụng cùng với các mẫu trang (page templates) không?
Được, nhưng đây là hai tính năng khác nhau nhưng có thể được kết hợp với nhau. Mẫu trang (page template) được sử dụng để chọn giao diện (layout) khác nhau cho từng “trang” cụ thể, trong khi mẫu CPT (Content Type Template) dùng để kiểm soát logic hiển thị cho toàn bộ loại nội dung đó. Bạn có thể tạo một “mẫu trang” riêng cho một bài viết cụ thể thuộc loại nội dung được quản lý bởi mẫu CPT đó.
Ví dụ, bạn có một thành viên loại “CPT” (Member CPT), và mẫu mặc định dành cho thành viên này là… single-member.phpBạn có thể tạo một thứ có tên là… page-template-leadership.php Trang mẫu đó, sau đó… WP_Query Trong trường hợp này, bạn cần tìm kiếm những thành viên giữ chức vụ cụ thể trong nhóm “CPT” và hiển thị thông tin của họ theo bố cục được định nghĩa bởi một mẫu (template) nhất định. Ở phía backend (phần quản trị nội dung), bạn cần tạo một trang mới trên hệ thống WordPress và chọn mẫu tùy chỉnh này cho trang đó. Điều này minh họa rõ tính linh hoạt của hệ thống mẫu trong WordPress.
Bước tiếp theo, chúng ta nên làm gì tiếp theo?
Đọc thêm và kiến thức thực tế
Những nội dung sau đây liên quan đến chủ đề của bài viết này, thích hợp để tiếp tục đọc sâu hơn. Ưu tiên bắt đầu với bài viết gần nhất với vấn đề hiện tại của bạn, rồi dần dần mở rộng sang các chủ đề xung quanh, hiệu quả thường sẽ tốt hơn.
- Chi tiết về cấu hình mạng đa trang web (multi-site network) trên WordPress
- Xây dựng dễ dàng các trang web chuyên nghiệp: Hướng dẫn toàn diện từ cơ bản đến nâng cao về WordPress
- Hướng dẫn Tối ưu WooCommerce: Xây dựng Website Thương mại Điện tử WordPress Mạnh mẽ từ Cơ bản
- Hướng dẫn cơ bản về WordPress: Xây dựng trang web chuyên nghiệp đầu tiên của bạn từ con số không
- Tại sao nên sử dụng WooCommerce để xây dựng cửa hàng trực tuyến?