Tạo custom post type và taxonomy trong wordpress

Xin chào cả nhà !. Chúc các bạn 1 ngày mới vui vẽ

Hôm nay mình xin hướng dẫn các bạn cách tạo một post type trong wordpress. Việc tạo một post type ngoài post type mặt định là post thì chúng ta dể dàng quản lý các tác vụ của nó hơn. Mình vụ như mình muốn tạo post type có tên là Tour   để mình quản lý các bài viết của Tour đó thôi, nó không liên quan tới thèn post của mình.

Mình sẽ không nói đến khái niệm post type là gì ?. Mình sẽ đi vào hướng dẫn trực tiếp để  tạo một post type nhanh chóng nhé.

Trước tiên, để tạo một custom post type thì bạn phải vào file functions.php nhưng bạn muốn dể quản lý hơn thì bạn có thể post type trong theme theo đường dẫn wp-content / theme/ [ten-theme] sau đó bạn tạo tên create-post-type.php. Sau đó bạn vào file functions.php để require vào. Mình thì hay viết thẳng vào file functions.php lun, các bạn có thể xem xét và tùy theo cách viết của các bạn nha.

1.Hướng dẫn tạo custom post type trong wordpress

Việc tạo post type thì có nhiều cách như viết code vào file functions, hay dùng plugin, hay dùng tool để tạo. Hôm nay mình sẽ hướng dẫn cách tạo 1 post type bằng code.

/*
* Creating a function to create our CPT
*/
 
function custom_post_type() {
    $labels = array(
        'name'                => _x( 'Tour', 'Post Type General Name', 'tourtvc' ),
        'singular_name'       => _x( 'Tour', 'Post Type Singular Name', 'tourtvc' ),
        'menu_name'           => __( 'Tours', 'tourtvc' ),
        'parent_item_colon'   => __( 'Parent Tour', 'tourtvc' ),
        'all_items'           => __( 'All Tour', 'tourtvc' ),
        'view_item'           => __( 'View Tour', 'tourtvc' ),
        'add_new_item'        => __( 'Add New Tour', 'tourtvc' ),
        'add_new'             => __( 'Add New', 'tourtvc' ),
        'edit_item'           => __( 'Edit Tour', 'tourtvc' ),
        'update_item'         => __( 'Update Tour', 'tourtvc' ),
        'search_items'        => __( 'Search Tour', 'tourtvc' ),
        'not_found'           => __( 'Not Found', 'tourtvc' ),
        'not_found_in_trash'  => __( 'Not found in Trash', 'tourtvc' ),
    );
     
     
    $args = array(
        'label'               => __( 'tours', 'tourtvc' ),
        'description'         => __( 'Tour news and reviews', 'tourtvc' ),
        'labels'              => $labels,
        'supports'            => array( 'title', 'editor', 'excerpt', 'author', 'thumbnail', 'comments', 'revisions', 'custom-fields', ),
        'hierarchical'        => false,
        'public'              => true,
        'show_ui'             => true,
        'show_in_menu'        => true,
        'show_in_nav_menus'   => true,
        'show_in_admin_bar'   => true,
        'menu_position'       => 5,
        'can_export'          => true,
        'has_archive'         => true,
        'exclude_from_search' => false,
        'publicly_queryable'  => true,
        'capability_type'     => 'post',
        'show_in_rest' => true,
 
    );
     
    // Registering your Custom Post Type
    register_post_type( 'tour', $args );
}
add_action( 'init', 'custom_post_type', 0 );

Array $args

Các keys thông dụng nhất của array $args ở bên dưới, không có khóa nào là bắt buộc:

  • labels – array định nghĩa nhiều loại văn bản, ví dụ  ‘Add New Post’ có thể đổi thành ‘Add New Movie’.
  • description – Mô tả ngắn về loại post type.
  • public – Post type có hiện cho tác giả và cách truy cập không.
  • publicly_queryable – Giá trị mặc định là giá trị public
  • show_ui – Giá trị mặc định là giá trị của public
  • show_in_nav_menus – Post của loại này có thể được thêm vào menu điều hướng hay không. Giá trị mặc định là giá trị public.
  • show_in_menu – Hiễn thị Post type trên thanh điều hướng trong Admin
  • show_in_admin_bar – Post type này có hiện trên thanh Admin.
  • menu_position – Vị trí hiễn thị trên thanh điều hướng
  • hierarchical – Giá trị mặc định là giá trị true
  • supports – hỗ trợ có chọn lọc nhiều tính năng như là featured images, excerpts, custom fields,…
  • has_archive – url sẽ dùng cấu trúc của permanlink của bạn, và slug là tên bạn điền vào trong tham số 1 của register_post_types()
  • query_var  – TRUE hoặc FALSE sẽ kiểm soát post có thể được xem bằng cách gõ post type và post name trong query của URL hay không.

Sau khi lưu lại đoạn code trên  thì vào admin bạn sẽ thấy tên mình vừa tạo là Tour .

Việc sau đó thì bạn thêm bài viết mới như post type bình thường.

 

Để hiễn thị post type ra ngoài giao diện thì bạn copy đoạn mã sau

<?php
$args = array(‘post_type’ => ‘tour’,’posts_per_page’ => 10);
$loop = new WP_Query ($args);
while ( $loop->have_posts() ): $loop->the_post();
 ?>
    <header class="entry-header">
       <h1 class="entry-title"><a href="<?php the_permalink();?>" rel="bookmark" class="entry-title"><?php the_title();?></a></h1>
    </header>
<?php

endwhile; wp_rest_qurery(); ?>

2. Tạo taxonomy trong wordpress

Nếu ở post type mặt định thì taxonomy là category. Bây giờ bạn muốn quản lý các bài post Tour và muốn tạo thêm taxonomy riêng để dể dàng quản lý thì bạn sẽ làm như thế nào.

Sau đây mình sẽ hướng dẫn các bạn cách tạo taxonomy bằng code nhé. Đầu tiên, bạn vào file functions.php và chèn đoạn code ở dưới vào.

// Let us create Taxonomy Types Locations for Custom Post Type
function tour_custom_taxonomy() {
 
  $labels = array(
    'name' => _x( 'Types Location', 'taxonomy general name' ),
    'singular_name' => _x( 'Types Location', 'taxonomy singular name' ),
    'search_items' =>  __( 'Search Types Location' ),
    'all_items' => __( 'All Types Location' ),
    'parent_item' => __( 'Parent Type Location' ),
    'parent_item_colon' => __( 'Parent Type Location:' ),
    'edit_item' => __( 'Edit Type Location' ), 
    'update_item' => __( 'Update Type Location' ),
    'add_new_item' => __( 'Add New Type Location' ),
    'new_item_name' => __( 'New Type Location Name' ),
    'menu_name' => __( 'Types Locations' ),
  ); 	
 
  register_taxonomy('types-locations',array('tour'), array(
    'hierarchical' => true,
    'labels' => $labels,
    'show_ui' => true,
    'show_admin_column' => true,
    'query_var' => true,
    'rewrite' => array( 'slug' => 'type-location' ),
  ));
}
add_action( 'init', 'tour_custom_taxonomy', 0 );

Mình giải thích một chút nhé.

‘name’ => Types Location : Đây là tên taxonomy

‘menu_name’ => __( ‘Types Locations’ ) : đây là tên hiện mở thanh menu trong admin

register_taxonomy(‘types-locations‘,array(‘tour‘) : types-locations là slug, tour đó là tên post type mình đã tạo ở trên.

Lưu lại bạn vào admin thì sẽ thấy như thế này nhé

 

Code để hiễn thị taxonomy ra ngoài giao diện

Tổng kết

Việc tạo ra một post type và taxonomy cực kì đơn giản, mục đích tạo ra post type để mình dể dàng quản lý các bài viết hơn. Các bạn quan tâm nhiều hơn về các mẹo và thủ thuật thì ghé qua chuyên mục này nhé.

Nếu bạn quan tâm hơn về lập trình theme wordpress thì có thể tham khảo seri hướng dẫn lập trình theme wodpress sắp ra mắt của mình. Trong seri này mình sẽ hướng dẫn các bạn về cách tạo dựng wordpress từ đầu từ a -z, demo về wesbite tin tức và share source cho các bạn thử hành lun nhé.

Hãy thử tạo ra và sử dụng, có thắc mắc gì thì mạnh dạn để lại comment bên dưới nhé. Mình rất vui khi được chia sẽ đền các bạn đam mê wordpress.