LẬP TRÌNH PLUGIN
CÁC CHỦ ĐỀ
BÀI MỚI NHẤT
Dự án mới của mình là gamehow.net, mời anh em ghé thăm và góp ý ạ.

Bài 11: Tạo Custom Post Type trong WordPress

Trong bài này mình sẽ hướng dẫn cách tạo Custom Post Type trong WordPress, đây là cách giúp bạn tạo ra một thể loại nhóm các bài viết mới cực kì đơn giản.

Trong hệ thống WordPress có nhiều thể loại bài viết như:

banquyen png
Bài viết này được đăng tại freetuts.net, không được copy dưới mọi hình thức.
  • Post (Post Type: 'post')
  • Page (Post Type: 'page')
  • Attachment (Post Type: 'attachment')
  • Revision (Post Type: 'revision')
  • Navigation menu (Post Type: 'nav_menu_item')

Đây là các thể loại mặc định có sẵn sau khi bạn cài đặt WordPress. Vấn đề đặt ra bây giờ là tôi muốn tạo một trang web show video và tin tức thì làm thế nào? Chẵng lẽ sử dụng thể loại post cho cả hai rồi tạo một Metadata cho người dùng chọn mỗi khi đăng bài viết? Điều này là không nên bởi rất khó mở rộng.

Với tình hình như vậy thì Custom Post Type sẽ là từ khóa giải quyết vấn đề này cho bạn đấy.

1. WordPres Custom Post Type là gì?

Custom Post Type trong WordPress là tạo ra một thể loại bài viết mới, như ở bài toan trên thì chúng ta sẽ tạo ra một thể loại tên là video.

Để tạo một Custom Post Type trong WordPress thì chúng ta sử dụng hàm register_post_type() và đưa nó vào một hook action tên là init.

Ví dụ: Tạo một thể loại Video

Bạn tạo file custom-post-type.php nằm trong thư mục includes và require nó vào file wp-learn.php (xem lại các bài 1, 2 để biết cấu trúc folder).

custom post type wordpress png

File wp-learn.php.

<?php
/**
Plugin Name: Learn WordPress
Plugin URI: https://freetuts.net
Description: Plugin dùng để học WordPress
Author: Nguyễn Văn Cường
Version: 1.0
Author URI: https://freetuts.net
*/

require 'includes/custom-post-type.php';

Bạn mở file custom-post-type.php lên và nhập vào nội dung sau:

add_action('init', 'create_post_type');

function create_post_type() {
    register_post_type('video', array(
            'labels' => array(
                'name' => __('Videos'),
                'singular_name' => __('Video')
            ),
            'public' => true,
            'has_archive' => true,
        )
    );
}

Bạn đăng nhập vào admin thì sẽ thấy một thể loại xuất hiện trong menu như hình sau:

custom post type wordpress 1 png

Làm thế nào mà WordPress có thể làm được như vậy? Mình không cần quan tâm đến nó làm như thế nào mà chỉ quan tâm đến cú pháp của hàm register_post_type() thôi :) Chúng ta cùng tìm hiểu hàm này nhé.

2. Hàm register_post_type trong WordPress

Hàm register_post_type dùng để đăng ký một thể loại bài viết và nó có cấu trúc như sau:

register_post_type( $post_type, $args = array() )

Trong đó:

  • $post_type là tên thể loại, với ví dụ trên thì sẽ là video.
  • $args là danh sác các tham số cấu hình cho thể loại này

Tham số $args bao gồm các thông tin chính sau:

  • label: Tên mô tả số nhiều dùng cho vấn đề dịch thuật
  • labels: Mảng này gồm nhiều phần tử và chức năng chung là chỉnh sửa text trên giao diện
    • name: Text hiển thị trên menu chính của thể loại. Ví dụ như Videos.
    • singular_name: Tên của mỗi bài viết, ví dụ với page thì ta gọi là mỗi Page, với post thì ta gọi là mỗi Post.
    • add_new: Text hiển thị thay thế cho từ Add New
    • add_new_item: Tiêu đề h1 của trang Add New.
    • edit_item: Nhãn hiển thị thay thế cho từ Edit Post hoặc Edit Page
    • new_item: Text hiển thị thay thế cho từ New Post hoặc New page
    • view_item: Text hiển thị thay thế cho chữ cho đường link xem live trong trang edit (phần slug)
    • search_items: Đoạn text cho button Search bài viết trong admin
    • not_found: Câu thông báo hiển thị khi tìm kiếm không ra bài viết.
    • not_found_in_trash: Câu thông báo hiển thị khi không có bài viết nằm trong mục trash.
    • parent_item_colon: Tìm hiểu sau
    • all_items: Text hiển thị link tất cả bài viết trong main menu của Admin
    • archives: Text hiển thị cho Post Archives hoặc page Archives
    • insert_into_item: Text cho Media Iframe button
    • uploaded_to_this_item: Text cho Media Iframe Filter
    • featured_image: Text cho từ Featured Image
    • set_featured_image: Text cho từ Set featured image
    • remove_featured_image: Text cho từ Remove featured image
    • use_featured_image: Text cho từ Use as featured image
    • menu_name: Tên hiển thị trên menu, nếu không truyền vào thì nó lấy giá trị của key name
    • filter_items_list: Text cho thẻ tiêu đề hiển thị ẩn
    • items_list_navigation: Text cho bảng phân trang tiêu đề ẩn
    • items_list: Text cho bảng tiêu đề ẩn
    • name_admin_bar: Text hiển thị menu trong nút +New nằm trên thanh bar trên cùng của giao diện admin. Bạn hãy hover vào New -> sẽ thấy xuất hiện đường link với nội dung là chữ mà bạn truyền vào và đường link sẽ link tới trang Add New.
  • description: Phần mô tả cho thể loại này
  • public: Nếu có giá trị TRUE thì mới hiển thị trên menu. Sẽ có một số thuộc tính kế thừa từ thuộc tính này như exclude_from_search, publicly_queryable, show_in_nav_menus, show_ui nếu giá trị các thuộc tính này không được thiết lập
  • exclude_from_search: Nếu có giá trị TRUE thì sẽ loại trừ các bài viết ra khỏi kết quả tìm kiếm bên ngoài frontend
  • publicly_queryable: Cấu hình đường dẫn Query String cho trang Search ngoài frontend.
  • show_ui: Nếu có giá trị TRUE thì sẽ hiển thị giao diện trong admin
  • show_in_nav_menus: Nếu có giá trị TRUE thì nó sẽ hiển thị bên trang quản lý menu.
  • show_in_menu: Nếu TRUE thì sẽ hiển thị trong Admin Menu
  • show_in_admin_bar: Nếu có giá trị TRUE thì sẽ hiển thị một đường link trên thanh Admin Menu Bar (menu nằm trên cùng +New -> Tên Menu)
  • menu_position: Vị trí hiển thị menu trên danh sách menu của admin, giá trị truyền vào là số nguyên bắt đầu từ 1.
  • menu_icon: URL đến Icon của menu
  • supports: Một mảng danh sách các metabox sẽ hiển thị trong trang Add New
  • register_meta_box_cb: Đây là một callback function gọi đến một hàm tạo Meta Boxes nào đó.
  • taxonomies: Một mảng các Taxonomies
  • has_archive: Hiển thị bài viết của thể loại này trong mục ngày tháng năm
  • capability_type: Nhóm quyền mà thể loại này kế thừa, là một mảng và tên quyền sẽ được tạo mới với tên là tên bạn truyền vào, ví dụ:
    'capability_type' => array(
        'edit_post'          => 'edit_video', 
        'read_post'          => 'read_video', 
        'delete_post'        => 'delete_video', 
        'edit_posts'         => 'edit_videos', 
        'edit_others_posts'  => 'edit_others_videos', 
        'publish_posts'      => 'publish_videos',       
        'read_private_posts' => 'read_private_videos', 
        'create_posts'       => 'edit_videos', 
    )
  • capabilities: Nhóm quyền của thể loại này
  • map_meta_cap: Tìm hiểu sau
  • hierarchical: Nếu có giá trị TRUE thì chức năng Attributes của trang sẽ có tác dụng
  • permalink_epmask:
  • rewrite: Cấu hình rewrite URL
  • query_var: Tìm hiêu sau
  • can_export: Cho phép sử dụng tool để export
  • show_in_rest: Hiển thị bài viết thể loại này trong REST API
  • rest_base: Tìm hiểu sau
  • rest_controller_class: Tìm hiểu sau
  • _builtin: Tìm hiểu sau
  • _edit_link: Đường dẫn edit của bài viết, không nên thay đổi thuộc tính này.

Bạn hãy vào đường link này để xem chi tiết hơn vì ở trên mình giải thích có vẻ hơi khó hiểu. Có một giải pháp là bạn vừa cấu hình vừa vào admin để xem kết quả thì sẽ dễ hiểu hơn rất nhiều.

3. Cách tạo Custom Post Type trong WordPress

Bây giờ chúng ta sử dụng hàm register_post_type để thêm thể loại video nhé.

Tiếp theo bạn nhập nội dung sau vào file custom-post-type.php.

add_action('init', 'create_video_type');

function create_video_type() {
    register_post_type('video', array(
            'label' => '123123',
            'labels' => array(
                'name'          => __('Videos'),
                'singular_name' => __('Video'),
                'add_new_item'  => __('Add New Video'),
                'new_item'      => __('New Video'),
                'add_new'       => __('Add Video'),
                'edit_item'     => __('Edit Video'),
                'search_items'  => __('Search Videos'),
                'all_items'  => __('Videos'),
                // Còn nhiều nữa các bạn tự thêm nhé
            ),
            'public' => true,
            'has_archive' => true,
            'exclude_from_search' => true,
            'capability_type' => array(
                'edit_post'          => 'edit_video', 
                'read_post'          => 'read_video', 
                'delete_post'        => 'delete_video', 
                'edit_posts'         => 'edit_videos', 
                'edit_others_posts'  => 'edit_others_videos', 
                'publish_posts'      => 'publish_videos',       
                'read_private_posts' => 'read_private_videos', 
                'create_posts'       => 'edit_videos', 
            )
            // Còn nhiều nữa ...
        )
    );
}

Bạn đăng nhập vào admin thì sẽ thấy giao diện như sau:

custom post type wordpress 1 png

Giao diện cũng không khác gì mấy so với phần 1.

Sau khi chạy đoạn code trên thì chúng ta có thêm thể loại video.

4. Lời kết

Custom Post Type là một chức năng khá quan trọng khi bạn lập trình trên WordPress bởi hầu hết các dự án đều phải tạo ra những Post Type mới. Hy vọng bài này sẽ giúp bạn biết cách tạo custom post type trong WordPress.

Cùng chuyên mục:

Cập nhật nhanh 3 bí kíp thiết kế web đẹp mới nhất 2021

Cập nhật nhanh 3 bí kíp thiết kế web đẹp mới nhất 2021

Sở hữu website đẹp, hấp dẫn và chuyên nghiệp là điều mà ...

Dịch vụ cài đặt blog bằng WordPress miễn phí

Dịch vụ cài đặt blog bằng WordPress miễn phí

Website là một công cụ không thể thiếu khi bán hàng online, nó giúp ta…

Bài 06: Tạo trang quản lý Options trong WordPress

Bài 06: Tạo trang quản lý Options trong WordPress

Ở bài trước mình có nêu ra một ví dụ về quản lý thông tin…

Bài 05: Options API trong WordPress: add_option / get_option ...

Bài 05: Options API trong WordPress: add_option / get_option ...

Trong database của WordPress bạn sẽ thấy một table ten là [prefix]_options, table này sẽ…

Bài 04: Tìm hiểu Hooks , Action và Filter trong WordPress

Bài 04: Tìm hiểu Hooks , Action và Filter trong WordPress

Bạn đã từng nghe khái niệm lập trình hướng sự kiện trong các Framework như…

Bài 02: WordPress API là gì? Danh sách API trong WordPress

Bài 02: WordPress API là gì? Danh sách API trong WordPress

Đáng lẽ mình không viết bài này nhưng lúc đang viết bài tiếp theo thì…

Cách tùy biến theme WordPress căn bản cho người mới bắt đầu

Cách tùy biến theme WordPress căn bản cho người mới bắt đầu

Khi [cài đặt WordPress trên Hosting] xong thì bạn có thể cài đặt theme để…

Hướng dẫn làm website WordPress chạy tiếp thị liên kết với AT

Hướng dẫn làm website WordPress chạy tiếp thị liên kết với AT

Ngày nay, công nghệ ngày càng phát triển dẫn đến khái niệm [tiếp thị liên…

Tổng hợp mã CSS thường dùng để tùy biến theme WordPress

Tổng hợp mã CSS thường dùng để tùy biến theme WordPress

WordPress là một CMS dùng để làm website rất phổ biến, hay nói chính xác…

Đánh giá GeneratePress - Cách sử dụng theme GeneratePress

Đánh giá GeneratePress - Cách sử dụng theme GeneratePress

Nếu bạn đang muốn tìm kiếm một theme với các tiêu chí nhẹ, nhanh và…

Làm blog cá nhân bằng WordPress với theme GeneratePress

Làm blog cá nhân bằng WordPress với theme GeneratePress

Thời gian qua chắc hẳn bạn đã nghe đến theme GeneratePress rồi phải không nào?…

Cài đặt WordPress trên localhost

Cài đặt WordPress trên localhost

WordPress được lập trình bằng ngôn ngữ PHP và sử dụng MySQL để lưu trữ,…

Bài 01: WordPress là gì? Nên làm website bằng WordPress?

Bài 01: WordPress là gì? Nên làm website bằng WordPress?

WordPress là một CMS được phát triển trên ngôn ngữ lập trình PHP ...

Tặng license theme Generatepress khi mua Hosting Tinohost

Tặng license theme Generatepress khi mua Hosting Tinohost

Chào các bạn, hiện nay WordPress đang trở thành một phổ biến nhất thế giới,…

12 Wordpress plugin tốt nhất nên dùng cho website WordPress 2021

12 Wordpress plugin tốt nhất nên dùng cho website WordPress 2021

Bạn vừa tạo một blog WordPress mới và đang phân vân không biết nên chọn…

Bài 12: Custom Taxonomy  trong WordPress

Bài 12: Custom Taxonomy trong WordPress

Bài trước mình đã hướng dẫn bạn tạo một thể loại bài viết mới bằng…

Bài 10: Hiển thị metadata ngoài frontend

Bài 10: Hiển thị metadata ngoài frontend

Sẵn có bạn hỏi làm thế nào để hiển thị nội dung bài viết ra…

Bài 09: Bốn bước custom Meta Boxes trong WordPress

Bài 09: Bốn bước custom Meta Boxes trong WordPress

Tới bài thứ chín này thì khái niệm Custom Meta Boxes không còn xa lạ…

Bài 08: Metadata API trong WordPress

Bài 08: Metadata API trong WordPress

WordPress sử dụng mô hình EAV nhằm giúp lập trình viên có thể tùy biến…

Bài 07: Custom Meta Boxes trong WordPress

Bài 07: Custom Meta Boxes trong WordPress

WordPress là một CMS nên hệ thống dữ liệu của nó chỉ dừng lại ở…

Top