Hướng dẫn tạo custom post type cho wordpress

Quảng cáo
Ads_ngang
Website dinhthuanit.com có bài Hướng dẫn tạo custom post type cho wordpress

WordPress cung cấp nhiều kiểu dữ liệu như post, page, attachment và wordpress cho phép định nghĩa thêm kiểu dữ liệu gọi là (custom post type). Custom post type cho phép bạn khái niệm kiểu dữ liệu riêng cũng đều có thể thêm các fields tùy ý.
wordpress custom post type
Ví dụ: làm website bán đồ , eg: tạo custom post “myproduct” kiểu này có những fields như: price, off_price,manufactor..

Custom post type API

Đăng ký custom post type sử dụng hàm register_post_type. Cú pháp:

     

Trong đó:

  • $post_type : kiểu dữ liệu.
  • $args : mảng tham số cấu hình cho custom post type.

Xem chi tiết cách dùng hàm:

 //đăng ký kiểu dữ liệu mới add_action('init','register_new_type'); function register_new_type(){ $args = array( 'label' =>  __('Business Manager'), //nhãn hiển thị trong admin 'singular_label' =>  __('Business'), 'public' =>  true, //cho phép sử dụng các bài viết với kiểu này 'show_ui' =>  true, //cho hiển thị tab trong admin 'capability_type' =>  'post', //sử dụng 1 số tính năng như kiểu post mặc định 'hierarchical' =>  true, 'has_archive' =>  true, //cho phép page archive 'supports' =>  array('title', 'editor', 'thumbnail'), //sử dụng tính năng có sẵn: field title, editor, trình quản lý ảnh thumbnail 'rewrite' =>  array('slug' =>  'slug1', 'with_front'=>  false), //cấu hình đường dẫn url 'taxonomies' =>  array('post_tag') //đăng ký tag hợp lý cho kiểu mới ); register_post_type('type1',$args); //chú ý: tên kiểu dữ liệu ko được viết hoa, nên viết thường toàn bộ //đăng ký taxonomy register_taxonomy("taxonomy_type1", array("type1"), array("hierarchical" =>  true, "label" =>  "Type1 Types", "singular_label" =>  "Type1 Type",'query_var'=> true, "rewrite" => array('with_front'=>  true, "slug" =>  'slug1'),'show_ui'=> true)); //chú ý cũng có thể đăng ký nhiều taxonomy cho kiểu này,... }  

Có một vài lưu cần tuân thủ:
-Quy định tên custom post type (name) không được viết hoa, viết thường toàn bộ.

kiểu Post chuẩn thì có categories, còn custom post thì coi là taxonomy. Tất nhiên category cũng sử dụng được trong custom post type.
Trong ví dụ trên đã đăng taxonomy mang tên “taxonomy-type1” có kiểu “type1”.

Custom post type permalink

Đường dẫn URL cho custom post type, mặc định là:
/
Với custom-post-slug chỉ định bởi $args[‘rewrite’][‘slug’]
Khuyến nghị : Nếu trong website wordpress có sử dụng custom post type thì hãy cài plugin “custom post type permalink”
Download plugin này tại địa chỉ: https://wordpress.org/plugins/custom-post-type-permalinks/
Sử dụng plugin này để viết lại đường dẫn cho custom post type cũng giống taxonomy sẽ tốt hơn.

Tạo Custom fields taxonomy cho custom post type

Thêm fields cho taxonomy, giả sử mình có taxonomy ‘bank-type’. Sử dụng action {taxonomy-name}_edit_form_fields , với {taxonomy-name} là tên của taxonomy cần thay đổi. Thêm đoạn code sau vào functions.php

   term_id; // Get the ID of the term you're editing $term_meta = get_option( "taxonomy_term_$t_id" ); // Do the check ?>                  <input type="text" name="term_meta[field1]" value="  "/>                   

Các fields của taxonomy được lưu tại option get_option( "taxonomy_term_$t_id" );
Bước tiếp chúng ta cần lưu các trường của taxonomy, sử dụng hook ‘edited_ ‘

 // lưu các trường custom của taxonomy kiểu bank add_action( 'edited_bank-type', 'save_taxonomy_custom_fields', 10, 2 ); // A callback function to save our extra taxonomy field(s) function save_taxonomy_custom_fields( $term_id ) { if ( isset( $_POST['term_meta'] ) ) { $t_id = $term_id; $term_meta = get_option( "taxonomy_term_$t_id" ); $cat_keys = array_keys( $_POST['term_meta'] ); foreach ( $cat_keys as $key ){ if ( isset( $_POST['term_meta'][$key] ) ){ $term_meta[$key] = $_POST['term_meta'][$key]; } } //save the option array update_option( "taxonomy_term_$t_id", $term_meta ); } }  

Giờ bạn muốn show các fields vừa thêm cho taxonomy, trong mục quản lý taxonomy của custom post type.

 //hiển thị columns taxonomy add_filter("manage_edit-bank-type_columns", 'banktax_columns'); function banktax_columns($theme_columns) { $new_columns = array( 'cb' =>  '  ', 'name' =>  __('Name'), 'header_icon' =>  'Icon', 'description' =>  __('Description'), 'slug' =>  __('Slug'), 'posts' =>  __('Posts') ); return $new_columns; } //nội dung cột taxonomy add_filter("manage_bank-type_custom_column", 'manage_banktax_columns', 10, 3); function manage_banktax_columns($out, $column_name, $theme_id) { // $theme = get_term($theme_id, 'bank-type'); $custom= get_option('taxonomy_term_'.$theme_id); $img=$custom['image']? $custom['image'] : plugins_url('assets/images/no-image.png',dirname(__FILE__)); //bank icon switch ($column_name) { case 'header_icon': // get header image url $out .= ""; break; default: break; } return $out; }  

Đoạn Code ở trên sử dụng 2 hook, trong đấy ‘manage_edit-bank-type_columns’ định vị tên cột fields, ‘manage_bank-type_custom_column’ hiển thị nội dung của fields.

Tạo Meta box cho custom post type

Để thêm fields cho custom post type, fields này sẽ xuất hiện trong phần nhập bài viết phía dưới mce editor. Tạo meta box cho custom post sử dụng hàm add_meta_box .

   ID); ?>     ...     

Bước kế đến là cần Lưu fields lại.

 //lưu fields add_action('save_post', 'type1_manager_save_extras'); function type1_manager_save_extras(){ global $post; if ( defined('DOING_AUTOSAVE') && DOING_AUTOSAVE ){ //if you remove this the sky will fall on your head. return $post_id; }elseif($post){ update_post_meta($post-> ID, "field1", $_POST["field1"]); update_post_meta($post-> ID, "field1", $_POST["field2"]); //.. } }  

Hiển thị nội dung dữ liệu của trường (field) trong phần quản trị dữ liệu wordpress admin

Cũng giống như hiển thị meta field trong quản lý taxonomys, thay vì chỉ định taxonomy thì chỉ định custom post type.

 //tạo cột trong danh sách bài viết cho kiểu này add_filter("manage_edit-type1_columns", "type1_manager_edit_columns"); function type1_manager_edit_columns($columns){ $columns = array( "cb" =>  "  ", "title" =>  "Name", "description" =>  "Description", //custom field here "cat" =>  "Category", "tag"=> "Tags" ); return $columns; } add_action("manage_type1_posts_custom_column", "type1_manager_custom_columns"); function type1_manager_custom_columns($column){ global $post; $custom = get_post_custom(); switch ($column) { case 'description': the_content(); break; case "cat": echo get_the_term_list($post-> ID,'bds-type','',','); break; case "tag": the_tags(); break; //custom field } }  

Ngoài bản chất dùng code trên, wordpress có plugin giúp bạn tạo field cho custom type cực mạnh ra, mình để nghị bạn nên sử dụng xem bài viết này.

Sử lý lỗi custom post type rewrite

Nếu Link Bài viết custom post type trả về 404, thì cho thêm dòng sau vào ngay sau hàm register_post_type.

 flush_rewrite_rules(); //add this after register_post_type  

Nguyên nhân custom post type rewrite không được tạo, bạn cũng có thể tạo lại rewrite cho custom post type nếu mà có mọi thay đổi.

 add_action('init', 'my_rewrite'); function my_rewrite() { global $wp_rewrite; $wp_rewrite-> flush_rules(); // !!! }  

Những gì vừa trình bầy trên này là căn bản về sử dụng custom post type trong wordpress, Custom post type cực kì quan trọng không có nó wordpress sẽ không phát triển được các plugin tuyệt vời như ngày nay. Có một vài plugin bổ trợ bạn tạo custom post type, do vậy nếu không rành về code bạn đừng quá lo lắng, một số wordpress plugin tốt nhất tạo custom post type sau đây mà mình biết:

Custom Post Type UI

Trước tiên tải plugin Custom Post Type UI, sau đó kích hoạt plugin. Để thêm custom post type, bạn truy cập vào menu CPT UI-> Add new.

wordpress custom post type ui

Phần Bên trái tạo mới custom post type. Với plugin này việc tạo custom post type vô cùng đơn giản, khai báo một số thông tin cho custom post type của bạn:

  • Post Type Name : tên sử dụng cho custom post type. Tối đã 20 ký tự, chưa được viết hoa và dấu cách. Trong WordPress ta biết có post type post , page , attachment , nav_menu_item ..
  • Label : nhãn hiển thị của custom post type.
  • Singular Label : nhãn hiển thị khi custom post type có một đối tượng (vd: khi custom post type có 1 bài viết).
  • Description : Chuỗi ngắn miêu tả custom post type.
  • Show UI : tạo phần quản trị trong admin cho custom post type.
  • Has Archive : post type có template archive. Chú ý: lựa chọn đây là true thì bật Rewrite = true
  • Custom Rewrite Slug : địa chỉ slug cho custom post type, nếu chẳng những định mặc định lấy Post Type Name.
  • With Front : sử dụng front base? ví dụ nếu web có địa chỉ (base): /blog/ chọn false địa chỉ post type (news) sẽ là /news/ , chọn true -> : /blog/news/
  • Support : hỗ trợ một số fields mặc định.
  • Built-in Taxonomies : chọn taxonomies cho custom post type này còn có trong danh sách. Nếu chưa tạo taxonomy thì để lại mục này, sau khi đã có taxonomy thì sửa lại mục này.

Khi nhập đầy đủ tin tức bấm vào Create Custom Post Type để hoàn tất việc tạo kiểu dữ liệu. Xem hình dưới:

custom post type ui-register post type

Phần bên đăng ký taxonomy. Tương tự như đăng ký post type, nhập các tin tức cho taxonomy, chú ý: dòng Attach to Post Type chọn vào tên custom post type vừa tạo ở trên để liên kết chúng với nhau.

custom post type ui - taxonomy

Custom post type sau khi được tạo xuất hiện một menu mới trong phần quản trị. Ví dụ:
quan tri wordpress custom post type ui

wordpress custom post type cho phép tạo nhiều post type và taxonomies. Để biết các custom post type có trong wordpress được tạo bởi plugin này hoặc chính vì plugin khác sinh ra: CPT UI-> Manage Post Types. Quản lý taxonomies: CPT UI-> Manage Taxonomies

Nhấn vào get code để lấy mã sinh ra của custom post type/taxonomy.
custom post type ui api

Plugin chỉ bổ trợ tạo custom type trên giao diện không có công năng thay thế wordpress api. Plugin sinh ra mã code mà tôi đã đề cập ở phần đầu bài viết.

Chúc bạn thành công.

Nếu bạn thấy bài viết này hữu ích, hãy chia sẻ với bạn bè bằng cách nhấn nút chia sẻ ở bên dưới. Theo dõi chúng tôi trên Twitter và Facebook

Bài viết Hướng dẫn tạo custom post type cho wordpress được tổng hợp và biên tập bởi: dinhthuanit.com. Mọi ý kiến đóng góp và phản hồi vui lòng gửi Liên Hệ cho dinhthuanit.com để điều chỉnh. dinhthuanit.com xin cảm ơn.

Bài Viết Liên Quan


Bài Viết Khác


Quảng cáo
Ads_ngang