Tạo Custom Post Type trong WordPress chỉ với 2 bước
Ngoài Post Type mặc định trong wordpress thì bạn cũng có thể tạo Custom post type để phục vụ cho mục đích riêng của mình. Ví dụ bạn có thể tạo custom post để làm sider cho trang web thay vì đặt ảnh chết hoặc lấy từ bài đăng ở post type.
2 bước tạo custom post type nhanh chóng
Bước 1:
Chúng ta sẽ tạo một custom post type
có tên gọi là “Slides”. Bạn chép phần code bên dưới này và bỏ vào function.php.
// Creating a Slides Custom Post Type
function slides_custom_post_type() {
$labels = array(
'name' => __( 'Slides' ),
'singular_name' => __( 'Slide'),
'menu_name' => __( 'Slides'),
'parent_item_colon' => __( 'Parent Slide'),
'all_items' => __( 'All Slides'),
'view_item' => __( 'View Slide'),
'add_new_item' => __( 'Add New Slide'),
'add_new' => __( 'Add New'),
'edit_item' => __( 'Edit Slide'),
'update_item' => __( 'Update Slide'),
'search_items' => __( 'Search Slide'),
'not_found' => __( 'Not Found'),
'not_found_in_trash' => __( 'Not found in Trash')
);
$args = array(
'label' => __( 'slides'),
'description' => __( 'Best Crunchify Slides'),
'labels' => $labels,
'supports' => array( 'title', 'editor', 'excerpt', 'author', 'thumbnail', 'revisions', 'custom-fields'),
'public' => true,
'hierarchical' => false,
'show_ui' => true,
'show_in_menu' => true,
'show_in_nav_menus' => true,
'show_in_admin_bar' => true,
'has_archive' => true,
'can_export' => true,
'exclude_from_search' => false,
'yarpp_support' => true,
'taxonomies' => array('post_tag'),
'publicly_queryable' => true,
'show_in_rest' => true,
'capability_type' => 'page'
);
register_post_type( 'slides', $args );
}
add_action( 'init', 'slides_custom_post_type', 0 );
Trong code trên
sẽ giúp phần soạn thảo nội dung bài đăng trong custom post của bạn hiển thị ở giao diện “gutenberg blocks” thay vì giao diện cổ điển. Tuy nhiên nếu bạn hoài cổ thì có thể xoá bỏ dòng code trên.'show_in_rest'
=> true,
Ngoài ra nếu bạn không muốn dài dòng mà vẫn đầy đủ chức năng thì có thể dùng đoạn code ngắn gọn dưới đây để tạo custom post type
// Our custom post type function
function create_posttype() {
register_post_type( 'movies',
// CPT Options
array(
'labels' => array(
'name' => __( 'Slides' ),
'singular_name' => __( 'Slide' )
),
'public' => true,
'has_archive' => true,
'rewrite' => array('slug' => 'slides'),
'show_in_rest' => true,
)
);
}
// Hooking up our function to theme setup
add_action( 'init', 'create_posttype' );
Sau khi bạn copy đoạn code custom post trên vào thì bạn sẽ thấy trong dashboard wordpress của bạn hiển thị “Slide” custom post như hình bên dưới.
Bước 2:
Sau khi tạo xong custom post type ta sẽ tạo custom taxonomy để giúp nhóm các bài đăng trong custom post lại. Mặc định có 2 custom taxonomy trong wordpress post là categories và tags. Chúng ta sẽ tạo một custom taxonomy cho phần slide custom post với tên gọi là “Type”
Bạn tiếp tục copy đoạn code dưới đây dán vào bên dưới đoạn code trên hoặc bất cứ đâu trong function.php
//create a custom taxonomy name it "type" for your posts
function slides_custom_taxonomy() {
$labels = array(
'name' => _x( 'Types', 'taxonomy general name' ),
'singular_name' => _x( 'Type', 'taxonomy singular name' ),
'search_items' => __( 'Search Types' ),
'all_items' => __( 'All Types' ),
'parent_item' => __( 'Parent Type' ),
'parent_item_colon' => __( 'Parent Type:' ),
'edit_item' => __( 'Edit Type' ),
'update_item' => __( 'Update Type' ),
'add_new_item' => __( 'Add New Type' ),
'new_item_name' => __( 'New Type Name' ),
'menu_name' => __( 'Types' ),
);
register_taxonomy('types',array('slides'), array(
'hierarchical' => true,
'labels' => $labels,
'show_ui' => true,
'show_admin_column' => true,
'query_var' => true,
'rewrite' => array( 'slug' => 'type' ),
));
}
add_action( 'init', 'slides_custom_taxonomy', 0 );
Lúc này bạn sẽ nhìn thấy được custom taxonomy với tên gọi là type xuất hiện trọng menu slide và bạn cũng có thể tạo cũng như thêm type cho bài viết trong custom post tương tự như bạn tạo category hay tag
Bạn đã hoàn thành việc tạo một custom post type wordpress chỉ trong 2 bước. Bây giờ bạn có thể đăng bài viết mới của mình trong cuspost tương tự như đăng bài viết trong post của wordpress.
Templates cho custom post type
Mặc định trong wordpress để hiển thị danh sách bài đăng và hiển thị chi tiết nội dung bài đăng thì nó sẽ sử dụng hai file mặc định dưới đây.
archive.php
single.php
Và khi bạn tạo một custom post type thì nó cũng sẽ sử dụng 2 files này để hiển thị danh sách và nội dung của custom post. Nhưng nếu bạn không thích hoặc có ý định thiết kế một template riêng custom post của mình thì bạn có thể sử dụng cú pháp sau.
archive-{post_type}.php
single-{post_type}.php
Dựa vào đó bạn sẽ có hai files lần lượt là archive-slides.php và single-slides.php.
Hiển thị custom post type trong wordpress
Để hoàn thiện hơn cho custom post bạn chúng ta sẽ tìm hiểu sơ qua về vấn đề hiển thị của custom post.
Đường dẫn Url thân thiện với SEO trong custom post type
Đường dẫn url để hiển thị bài đăng trong archive page của bạn sẽ có dạng như dưới đây:
https://ten-mien-cua-ban.com/?post_type=slides
Tuy nhiên đường dẫn url này sẽ không thân thiện dành cho SEO vì vậy bạn nên sử dụng đường dẫn sau để cho url của bạn thân thiện với SEO hơn.
https://ten-mien-cua-ban.com/slides
Chú ý: Nếu url thân thiện với SEO mà không hiển thị được bài đăng thì bạn vào Settings -> Permalinks và chọn vào ô “Post name” rồi lưu lại là được.
Query cho custom post type trong wordpress
Ngoài việc hiển thị bài đăng theo mặc định như trên thì chúng ta cũng có thể nhờ đến vòng lặp query để hiển thị bài đăng custom post type ở bất cứ đâu chúng ta mong muốn.
Bạn áp dụng đoạn code bên dưới và đừng quên đổ post_type lại cho đúng với cái của bạn đang làm nhé.
<?php
$args = array(
'post_type' => 'slides',
'post_status' => 'publish',
'tax_query' => array(
array(
'taxonomy' => 'testimonial_service',
'field' => 'slug',
'terms' => 'diving'
)
)
);
$the_query = new WP_Query( $args );
if( $the_query ->have_posts() ) :
?>
<ul>
<?php
while( $the_query ->have_posts() ) :
$the_query ->the_post();
?>
<li><?php printf( '%1$s - %2$s', get_the_title(), get_the_content() ); ?></li>
<?php
endwhile;
wp_reset_postdata();
?>
</ul>
<?php
else :
esc_html_e( 'No slides in the diving taxonomy!', 'text-domain' );
endif;
?>
Ngoài những phần trên bạn cũng có thể hiển thị bài đăng custom post trong widget hay ngoài trang chủ…