Tạo custom post types trong WordPress

Giới thiệu về Custom Post Types trong WordPress
WordPress không chỉ giới hạn ở việc tạo bài viết (Posts) và trang (Pages). Nó cung cấp một tính năng mạnh mẽ được gọi là Custom Post Types (CPTs), cho phép bạn tạo các loại nội dung khác nhau, phù hợp với nhu cầu cụ thể của trang web của bạn. Ví dụ, nếu bạn đang xây dựng một trang web về bất động sản, bạn có thể tạo một CPT có tên là “Nhà đất” với các trường tùy chỉnh như giá, địa chỉ, số phòng, v.v. Tương tự, nếu bạn có một trang web nhà hàng, bạn có thể tạo một CPT có tên là “Món ăn” với các trường như mô tả, giá cả, hình ảnh, v.v.
Việc sử dụng Custom Post Types giúp bạn tổ chức nội dung một cách hiệu quả hơn, dễ dàng quản lý và hiển thị nội dung đó trên trang web của bạn. Nó cũng giúp cải thiện SEO bằng cách cung cấp cấu trúc nội dung rõ ràng hơn cho các công cụ tìm kiếm.
Tại sao nên sử dụng Custom Post Types?
Việc sử dụng Custom Post Types mang lại nhiều lợi ích:
- Tổ chức nội dung tốt hơn: CPTs giúp bạn phân loại và quản lý nội dung một cách có cấu trúc, đặc biệt khi bạn có nhiều loại nội dung khác nhau trên trang web của mình.
- Tùy biến cao: Bạn có thể thêm các trường tùy chỉnh (custom fields) vào CPTs để lưu trữ thông tin cụ thể cho từng loại nội dung.
- SEO tốt hơn: CPTs giúp công cụ tìm kiếm hiểu rõ hơn về cấu trúc nội dung của bạn, từ đó cải thiện thứ hạng SEO.
- Dễ dàng quản lý: Bạn có thể tạo giao diện quản lý riêng cho từng CPT, giúp bạn dễ dàng thêm, chỉnh sửa và xóa nội dung.
- Khả năng mở rộng: CPTs có thể được mở rộng với các tính năng khác nhau thông qua các plugin và code tùy chỉnh.
Các cách tạo Custom Post Types trong WordPress
Có nhiều cách để tạo Custom Post Types trong WordPress:
- Sử dụng Plugin: Đây là cách phổ biến và dễ dàng nhất, đặc biệt cho người mới bắt đầu. Có nhiều plugin miễn phí và trả phí để bạn lựa chọn.
- Sử dụng Code (functions.php hoặc Plugin tùy chỉnh): Cách này đòi hỏi kiến thức về PHP và WordPress, nhưng cho phép bạn có toàn quyền kiểm soát quá trình tạo CPT.
Sử dụng Plugin để tạo Custom Post Types
Đây là cách đơn giản và phổ biến nhất. Một số plugin phổ biến để tạo CPTs bao gồm:
- Custom Post Type UI: Plugin miễn phí, dễ sử dụng và có nhiều tính năng hữu ích.
- Pods: Plugin miễn phí, mạnh mẽ và linh hoạt, cho phép bạn tạo CPTs, Custom Fields và Taxonomy.
- ACF (Advanced Custom Fields): Plugin trả phí (có phiên bản miễn phí giới hạn), cung cấp các trường tùy chỉnh mạnh mẽ và dễ sử dụng. Tuy nhiên, để tạo CPTs bằng ACF, bạn cần sử dụng phiên bản Pro.
Ví dụ, chúng ta sẽ sử dụng plugin Custom Post Type UI.
- Cài đặt và kích hoạt plugin Custom Post Type UI.
- Vào menu CPT UI trong bảng điều khiển WordPress.
- Chọn Add/Edit Post Types.
- Nhập Post Type Slug (ví dụ:
nhadat
). Slug này sẽ được sử dụng trong URL của CPT. - Nhập Plural Label (ví dụ: Nhà đất). Đây là tên hiển thị của CPT trong bảng điều khiển WordPress.
- Nhập Singular Label (ví dụ: Nhà đất). Đây là tên hiển thị của một mục trong CPT.
- Nhấp vào Add Post Type.
- Bạn có thể tùy chỉnh các tùy chọn khác như Supports (các tính năng hỗ trợ như title, editor, thumbnail, excerpt, v.v.), Taxonomies (phân loại), Menu Icon, v.v.
Sử dụng Code để tạo Custom Post Types
Nếu bạn muốn có toàn quyền kiểm soát và không muốn sử dụng plugin, bạn có thể tạo CPTs bằng code. Thêm đoạn code sau vào file functions.php
của theme (hoặc tốt hơn là tạo một plugin tùy chỉnh):
function create_nhadat_post_type() {
$labels = array(
'name' => _x( 'Nhà đất', 'post type general name', 'textdomain' ),
'singular_name' => _x( 'Nhà đất', 'post type singular name', 'textdomain' ),
'menu_name' => _x( 'Nhà đất', 'admin menu', 'textdomain' ),
'name_admin_bar' => _x( 'Nhà đất', 'add new on admin bar', 'textdomain' ),
'add_new' => _x( 'Thêm mới', 'nhà đất', 'textdomain' ),
'add_new_item' => __( 'Thêm nhà đất mới', 'textdomain' ),
'new_item' => __( 'Nhà đất mới', 'textdomain' ),
'edit_item' => __( 'Chỉnh sửa nhà đất', 'textdomain' ),
'view_item' => __( 'Xem nhà đất', 'textdomain' ),
'all_items' => __( 'Tất cả nhà đất', 'textdomain' ),
'search_items' => __( 'Tìm kiếm nhà đất', 'textdomain' ),
'parent_item_colon' => __( 'Nhà đất cha:', 'textdomain' ),
'not_found' => __( 'Không tìm thấy nhà đất nào.', 'textdomain' ),
'not_found_in_trash' => __( 'Không có nhà đất nào trong thùng rác.', 'textdomain' )
);
$args = array(
'labels' => $labels,
'public' => true,
'publicly_queryable' => true,
'show_ui' => true,
'show_in_menu' => true,
'query_var' => true,
'rewrite' => array( 'slug' => 'nhadat' ),
'capability_type' => 'post',
'has_archive' => true,
'hierarchical' => false,
'menu_position' => null,
'supports' => array( 'title', 'editor', 'author', 'thumbnail', 'excerpt', 'comments' )
);
register_post_type( 'nhadat', $args );
}
add_action( 'init', 'create_nhadat_post_type' );
Giải thích:
create_nhadat_post_type()
: Đây là hàm tạo Custom Post Type.$labels
: Mảng chứa các nhãn hiển thị cho CPT trong bảng điều khiển WordPress.$args
: Mảng chứa các tham số cấu hình cho CPT.public
: Xác định CPT có được hiển thị công khai hay không.publicly_queryable
: Xác định CPT có thể truy vấn công khai hay không.show_ui
: Xác định CPT có hiển thị giao diện quản lý trong bảng điều khiển WordPress hay không.rewrite
: Xác định slug (URL) cho CPT.supports
: Xác định các tính năng hỗ trợ cho CPT (ví dụ: title, editor, thumbnail, excerpt).
register_post_type( 'nhadat', $args )
: Hàm đăng ký CPT với WordPress.add_action( 'init', 'create_nhadat_post_type' )
: Hàm này được gọi khi WordPress khởi tạo, đảm bảo CPT được đăng ký.
Sau khi thêm đoạn code này, bạn sẽ thấy một menu “Nhà đất” mới trong bảng điều khiển WordPress.
Thêm Custom Fields (Trường tùy chỉnh) vào Custom Post Types
Sau khi tạo Custom Post Type, bạn cần thêm các Custom Fields để lưu trữ thông tin cụ thể cho từng loại nội dung. Ví dụ, nếu bạn có CPT “Nhà đất”, bạn có thể thêm các Custom Fields như “Giá”, “Địa chỉ”, “Số phòng”, v.v.
Tương tự như việc tạo CPT, bạn có thể sử dụng plugin hoặc code để tạo Custom Fields.
Sử dụng Plugin để tạo Custom Fields
Plugin phổ biến nhất để tạo Custom Fields là Advanced Custom Fields (ACF). ACF cung cấp giao diện trực quan và dễ sử dụng để tạo các loại Custom Fields khác nhau, bao gồm text, number, select, image, file, v.v.
- Cài đặt và kích hoạt plugin Advanced Custom Fields (ACF).
- Vào menu Custom Fields trong bảng điều khiển WordPress.
- Chọn Add New.
- Nhập Field Group Title (ví dụ: Thông tin nhà đất).
- Nhấp vào Add Field để thêm một Custom Field mới.
- Nhập Field Label (ví dụ: Giá).
- Field Name sẽ được tự động tạo dựa trên Field Label.
- Chọn Field Type (ví dụ: Number).
- Tùy chỉnh các tùy chọn khác cho Field Type (ví dụ: Format, Required, v.v.).
- Lặp lại các bước trên để thêm các Custom Fields khác.
- Trong phần Location, chọn Post Type và chọn CPT mà bạn muốn thêm Custom Fields (ví dụ: Nhà đất).
- Nhấp vào Publish để lưu Field Group.
Sử dụng Code để tạo Custom Fields
Bạn có thể sử dụng hàm add_post_meta()
để thêm Custom Fields vào CPT. Tuy nhiên, cách này phức tạp hơn và đòi hỏi kiến thức về PHP và WordPress.
Lưu ý: Cách sử dụng code để tạo Custom Fields thường được sử dụng khi bạn muốn có một giao diện quản lý tùy chỉnh hơn cho Custom Fields của mình.
Hiển thị Custom Post Types và Custom Fields trên trang web
Sau khi tạo CPT và Custom Fields, bạn cần hiển thị chúng trên trang web của bạn. Có nhiều cách để hiển thị CPT và Custom Fields:
- Sử dụng Theme Files: Chỉnh sửa trực tiếp các file theme (ví dụ:
single.php
,archive.php
) để hiển thị CPT và Custom Fields. - Sử dụng Template Tags: Sử dụng các template tags của WordPress (ví dụ:
the_title()
,the_content()
,get_post_meta()
) để hiển thị CPT và Custom Fields. - Sử dụng Plugin: Sử dụng các plugin để tạo layout và hiển thị CPT và Custom Fields một cách trực quan (ví dụ: Elementor, Beaver Builder).
Ví dụ, nếu bạn muốn hiển thị CPT “Nhà đất” trên trang single-nhadat.php
(nếu có), bạn có thể sử dụng code sau:
<?php
get_header();
while ( have_posts() ) :
the_post();
?>
<article id="post-<?php the_ID(); ?>" <?php post_class(); ?>>
<header class="entry-header">
<h1 class="entry-title"><?php the_title(); ?></h1>
</header><!-- .entry-header -->
<div class="entry-content">
<?php the_content(); ?>
<?php
$gia = get_post_meta( get_the_ID(), 'gia', true );
$diachi = get_post_meta( get_the_ID(), 'diachi', true );
$sophong = get_post_meta( get_the_ID(), 'sophong', true );
if ( ! empty( $gia ) ) {
echo '<p>Giá: ' . esc_html( $gia ) . '</p>';
}
if ( ! empty( $diachi ) ) {
echo '<p>Địa chỉ: ' . esc_html( $diachi ) . '</p>';
}
if ( ! empty( $sophong ) ) {
echo '<p>Số phòng: ' . esc_html( $sophong ) . '</p>';
}
?>
</div><!-- .entry-content -->
</article><!-- #post-<?php the_ID(); ?> -->
<?php
endwhile;
get_footer();
?>
Giải thích:
get_post_meta( get_the_ID(), 'gia', true )
: Lấy giá trị của Custom Field có tên là “gia” cho bài viết hiện tại. Tham sốtrue
trả về giá trị đơn (nếu Custom Field chỉ có một giá trị).esc_html()
: Hàm này được sử dụng để bảo vệ trang web khỏi các lỗ hổng bảo mật XSS bằng cách mã hóa các ký tự HTML đặc biệt.
Kết luận
Custom Post Types là một tính năng mạnh mẽ của WordPress cho phép bạn tạo các loại nội dung khác nhau và tổ chức chúng một cách hiệu quả. Bằng cách sử dụng CPTs và Custom Fields, bạn có thể xây dựng các trang web phức tạp với cấu trúc nội dung rõ ràng và dễ quản lý. Dù bạn chọn sử dụng plugin hay code, việc hiểu rõ về CPTs là rất quan trọng để tận dụng tối đa sức mạnh của WordPress.