Đăng nhập

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

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.

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