Custom post type là gì? cách tạo custom post type? Custom post type dùng làm gì?
Đây là câu hỏi mà mình tin rất nhiều bạn khi bắt đầu tiếp xúc với wordpress sẽ thắc mắc, điển hình là mình trước đây ^^. Hôm nay mình sẽ hướng dẫn cho các bạn cách để tạo ra được 1 custom post type theo ý mình nhé.
Đầu tiên định nghĩa sơ sơ custom post type là gì?
Mình cũng k biết giải thích như thế nào, bạn có thể hình dung custom post type nó có công dụng giống với post và page vậy đó. Chúng ta có thể tạo 1 bài viết mới, rồi xem lại tất cả các bài viết thuộc post type đó. Điển hình như post, page và product mà mình hay sử dụng z.
Một số chức năng mà bạn sử dụng được trong post và page thì hoàn toàn có thể sử dụng được trên custom post type nhé. Vì nó kế thừa hoàn toàn các tính năng của 2 loại mặc định này.
Mình nói đến đây chắc bạn cũng đã phần nào đó nắm được custom post type là gì rồi đúng không.
Cách tạo 1 custom post type
Đoạn function dưới đây sẽ giúp bạn tạo 1 custom post type với tên gọi là videos.
function video_register() {
$labels = array(
'name' => 'Videos',
'singular_name' => 'Video',
'add_new' => 'Add New',
'add_new_item' => 'Add New Video',
'edit_item' => 'Edit Video',
'new_item' => 'New Video',
'view_item' => 'View Video',
'search_items' => 'Search Videos',
'not_found' => 'Nothing found',
'not_found_in_trash' => 'Nothing found in Trash',
'parent_item_colon' => ''
);
$args = array(
'labels' => $labels,
'hierarchical' => false,// Cho phép phân cấp - mặc định post là false và page là true
'public' => true,
'publicly_queryable' => true,
'show_ui' => true,
'query_var' => true,
'has_archive' => true,
'rewrite' => array( 'slug' => 'Videos', 'with_front' => true ),
'capability_type' => 'post',
'menu_position' => 6,
'supports' => array('title', 'excerpt','author','comments','editor','thumbnail','custom-fields','revisions','trackbacks')
);
register_post_type( 'Videos' , $args );
}
Đoạn mã này có một số tham số, bạn có thể tham khảo thêm các tham số này tại: https://developer.wordpress.org/reference/functions/register_post_type/
Trên đây mình không có truyền tham số ‘taxonomies’ vào, tham số này khá quan trọng, nếu bạn không thêm vào thì nó sẽ k thể lưu trự được, ở dưới mình sẽ tạo 1 custom taxonomy nên đoạn này mình sẽ lướt qua. Nếu như bạn muốn sử dụng mặc định category là tag thì bạn thêm vào: ‘taxonomies’=> array( ‘category’,’post_tag’) nhé.
Một số tham số bạn nên để mặc định nhé, 1 số cái thì tùy chỉnh lại cho phù hợp với post và page.
Cách tạo custom taxonomy
Custom taxonomy bạn có thể hiểu giống với category và tag là nơi để lưu trữ và phân loại bài viết.
Đoạn function dưới đây là 1 ví dụ tạo ra 1 custom taxonomy.
function video_categories_register() {
$labels = array(
'name' => 'Video Categories',
'singular_name' => 'Video Category',
'search_items' => 'Search Video Categories',
'popular_items' => 'Popular Video Categories',
'all_items' => 'All Video Categories',
'parent_item' => 'Parent Video Category',
'edit_item' => 'Edit Video Category',
'update_item' => 'Update Video Category',
'add_new_item' => 'Add New Video Category',
'new_item_name' => 'New Video Category',
'separate_items_with_commas' => 'Separate Video categories with commas',
'add_or_remove_items' => 'Add or remove Video categories',
'choose_from_most_used' => 'Choose from most used Video categories'
);
$args = array(
'label' => 'Videos Categories',
'labels' => $labels,
'public' => true,
'hierarchical' => true,
'show_ui' => true,
'show_in_nav_menus' => true,
'args' => array( 'orderby' => 'term_order' ),
'rewrite' => array( 'slug' => 'videos', 'with_front' => true, 'hierarchical' => true ),
'query_var' => true
);
register_taxonomy( 'videos_categories', 'videos', $args );
}
Bạn lưu ý là 2 đoạn function này liên quan với nhau, vì vậy khi bạn custom lại thì lưu ý để tên chúng giống nhau để chúng có thể liên kết với nhau nhé.
Bạn chú ý ở 2 function register_taxonomy và register_post_type tên phải giống nhau không thì không ra đâu nha.
Để có thể biết mình tạo thành công hay không thì sau khi tạo xong các bạn viết một bài và vào xem thử nó có hiển thị không. Nếu như rơi vào trường hợp 404 thì bạn vào setting > liên kết > save. Để cập nhật lại đường dẫn nhé.
Mình cũng gặp 1 trường hợp là trang lưu trữ và trang bài viết không hiển thị. Cái này khá đau đầu vì đến giờ mình vẫn chưa tìm ra nguyên nhân, có thể là do bạn đã từng tạo 1 custom post type dạng này rồi, nhưng lại xóa nên nó còn lưu trong database nên khi gọi ra nó không ra. Bạn thử làm sạch database rùi thử lại nhé.
Bài viết tiếp theo mình sẽ hướng dẫn tạo template riêng để hiển thị bài custom post type và trang hiển thị lưu trữ nhé.
Chào bạn, nếu mình muốn tạo riêng cho phần này 1 trang single chi tiết khác thì làm như thế nào bạn
Cái này bạn có thể tìm hiểu với từ khóa “Tạo single page cho custom post type” Mình sẽ cập nhật phần này trong thời gian sắp tới. Bạn có thể tạo 1 file PHP với tên gọi là single-tên_post_type.php. Rồi lưu nó ngay sau thư mục child theme của mình là được (…Childtheme/single-tên_post_type.php)
Ok Cảm ơn bạn để mình thử