Custom Post Type (CPT) trong WordPress — một tính năng cực kỳ mạnh để tạo loại bài viết riêng biệt, như:
- Sản phẩm
- Khóa học
- Dự án
- Phim
- Sự kiện
- …
Custom Post Type là gì?
Mặc định WordPress có:
post
→ Bài viếtpage
→ Trang tĩnh
→ Nhưng bạn có thể tạo thêm loại bài viết tùy ý như: sanpham
, khoahoc
, phimle
, v.v.
Cách tạo Custom Post Type bằng code
Thêm đoạn sau vào functions.php
trong theme:
Ví dụ: CPT tên là khoahoc
function gfon_register_cpt_khoahoc() {
$labels = array(
'name' => 'Khóa học',
'singular_name' => 'Khóa học',
'add_new' => 'Thêm khóa học',
'add_new_item' => 'Thêm khóa học mới',
'edit_item' => 'Chỉnh sửa khóa học',
'new_item' => 'Khóa học mới',
'view_item' => 'Xem khóa học',
'search_items' => 'Tìm kiếm khóa học',
'not_found' => 'Không tìm thấy',
'not_found_in_trash' => 'Không có trong thùng rác',
'all_items' => 'Tất cả khóa học',
);
$args = array(
'labels' => $labels,
'public' => true,
'has_archive' => true,
'rewrite' => array('slug' => 'khoa-hoc'),
'menu_icon' => 'dashicons-welcome-learn-more', // icon đẹp
'supports' => array('title', 'editor', 'thumbnail', 'excerpt', 'custom-fields'),
'show_in_rest' => true, // Hỗ trợ Gutenberg
);
register_post_type('khoahoc', $args);
}
add_action('init', 'gfon_register_cpt_khoahoc');
Sau khi thêm xong:
- Vào admin sẽ thấy mục “Khóa học” bên trái.
- Bạn có thể thêm bài viết giống như post bình thường.
- Đường dẫn:
https://yourdomain.com/khoa-hoc/ten-khoa-hoc
Hiển thị CPT ra ngoài giao diện
Tạo file: single-khoahoc.php
Chèn đoạn đơn giản:
<?php get_header(); ?>
<h1><?php the_title(); ?></h1>
<div>
<?php the_content(); ?>
</div>
<?php get_footer(); ?>
Tạo thêm archive-khoahoc.php
để hiển thị danh sách:
<?php get_header(); ?>
<h1>Danh sách khóa học</h1>
<?php if ( have_posts() ) : while ( have_posts() ) : the_post(); ?>
<article>
<h2><a href="<?php the_permalink(); ?>"><?php the_title(); ?></a></h2>
<p><?php the_excerpt(); ?></p>
</article>
<?php endwhile; endif; ?>
<?php get_footer(); ?>
Lấy bài viết CPT trong bất kỳ template nào
Dùng WP_Query
để lấy:
<?php
$args = array(
'post_type' => 'khoahoc',
'posts_per_page' => 5
);
$query = new WP_Query($args);
if ( $query->have_posts() ) :
while ( $query->have_posts() ) : $query->the_post(); ?>
<h3><?php the_title(); ?></h3>
<p><?php the_excerpt(); ?></p>
<?php endwhile;
wp_reset_postdata();
endif;
?>
Tuỳ chọn nâng cao cho CPT
Tuỳ chọn | Ý nghĩa |
---|---|
'hierarchical' => true | CPT có cấp bậc như page (cha – con) |
'taxonomies' => array('category', 'post_tag') | Gắn danh mục & tag như bài viết |
'show_in_rest' => true | Bắt buộc nếu muốn dùng Gutenberg |
Tổng kết
Việc cần làm | Ghi nhớ |
---|---|
Tạo CPT = register_post_type() | Thêm vào functions.php |
Hiển thị CPT = single-{posttype}.php | Giao diện cho bài viết riêng |
Hiển thị danh sách = archive-{posttype}.php | Trang tổng hợp |
Lấy bài CPT thủ công = WP_Query | Gọi dữ liệu ra bất kỳ đâu bạn muốn |
Thảo luận