Lập trình WordPress: Custom Post Type (CPT)

Phong

By Phong

Đăng ngày Tháng 7 5, 2025

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ết
  • page → 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' => trueCPT 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' => trueBắt buộc nếu muốn dùng Gutenberg

Tổng kết

Việc cần làmGhi nhớ
Tạo CPT = register_post_type()Thêm vào functions.php
Hiển thị CPT = single-{posttype}.phpGiao diện cho bài viết riêng
Hiển thị danh sách = archive-{posttype}.phpTrang tổng hợp
Lấy bài CPT thủ công = WP_QueryGọi dữ liệu ra bất kỳ đâu bạn muốn

Thảo luận

Email của bạn sẽ không được hiển thị công khai. Các trường bắt buộc được đánh dấu *

Đăng ký nhận tin mới

Nhận bài học, tài nguyên và cơ hội việc làm qua email hàng tuần.

[global_subscribe_form]

Chúng tôi cam kết không spam. Bạn có thể hủy bất cứ lúc nào.