Custom Taxonomy là gì?
Taxonomy = hệ thống phân loại bài viết (giống như category và tag trong WordPress)
➡️ Bạn có thể tạo taxonomy riêng, ví dụ:
- Loại sản phẩm (Cao cấp, Phổ thông)
- Môn học (Toán, Lý, Hóa)
- Thể loại phim (Hành động, Tình cảm, Kinh dị)
- Trình độ khóa học (Cơ bản, Nâng cao)
Cách tạo Custom Taxonomy
Bạn sẽ dùng hàm register_taxonomy()
để khai báo.
🧾 Ví dụ: Tạo taxonomy “Môn học” cho CPT “khoahoc”
Thêm vào functions.php
:
function gfon_register_taxonomy_monhoc() {
$labels = array(
'name' => 'Môn học',
'singular_name' => 'Môn học',
'search_items' => 'Tìm môn học',
'all_items' => 'Tất cả môn học',
'edit_item' => 'Chỉnh sửa môn học',
'update_item' => 'Cập nhật môn học',
'add_new_item' => 'Thêm môn học mới',
'new_item_name' => 'Tên môn học mới',
'menu_name' => 'Môn học',
);
$args = array(
'hierarchical' => true, // true = dạng cây như category, false = tag
'labels' => $labels,
'show_ui' => true,
'show_admin_column' => true,
'rewrite' => array('slug' => 'mon-hoc'),
'show_in_rest' => true,
);
register_taxonomy('monhoc', array('khoahoc'), $args);
}
add_action('init', 'gfon_register_taxonomy_monhoc');
Bây giờ khi bạn tạo bài viết loại “Khóa học”, bạn sẽ thấy có mục “Môn học” để chọn như danh mục.
Kiểm tra trên admin
- Vào Khóa học → Thêm mới
- Ở bên phải sẽ có hộp “Môn học”
- Bạn có thể tạo các môn như: Toán, Lý, Hóa, v.v.
Hiển thị taxonomy ngoài giao diện
Trong single-khoahoc.php
, thêm:
<?php
$terms = get_the_terms(get_the_ID(), 'monhoc');
if ($terms && !is_wp_error($terms)) {
echo '<p><strong>Môn học:</strong> ';
foreach ($terms as $term) {
echo '<a href="' . get_term_link($term) . '">' . $term->name . '</a> ';
}
echo '</p>';
}
?>
Mã này sẽ hiển thị danh sách “Môn học” của khóa học hiện tại, có link ra trang lưu trữ từng môn.
Tùy chỉnh giao diện taxonomy
Tạo file taxonomy-monhoc.php
trong theme để hiển thị danh sách bài thuộc mỗi môn:
<?php get_header(); ?>
<h1>Khóa học thuộc môn: <?php single_term_title(); ?></h1>
<?php if (have_posts()) : while (have_posts()) : the_post(); ?>
<h2><a href="<?php the_permalink(); ?>"><?php the_title(); ?></a></h2>
<?php endwhile; else : ?>
<p>Không có khóa học nào.</p>
<?php endif; ?>
<?php get_footer(); ?>
Mẹo nâng cao
Tính năng | Mẹo thực hiện |
---|---|
Tạo nhiều taxonomy | Gọi nhiều lần register_taxonomy() |
Gắn taxonomy cho nhiều post type | Trong mảng thứ 2 của register_taxonomy() , thêm array('post', 'khoahoc') |
Thêm ảnh cho taxonomy | Dùng plugin như ACF + termmeta |
Tổng kết
Khái niệm | Nội dung |
---|---|
Custom Taxonomy | Tạo danh mục / thẻ riêng cho CPT |
Hàm sử dụng | register_taxonomy() |
Giao diện hiển thị | taxonomy-{slug}.php |
Hiển thị term ra ngoài | Dùng get_the_terms() và get_term_link() |
Gợi ý ứng dụng | Môn học, thể loại, trình độ, nhãn hiệu, v.v. |
Thảo luận