เวิร์ดเพรส (WordPress) เป็นเครื่องมือที่ใช้ในการสร้างเว็บไซต์ที่มีความยืดหยุ่นสำหรับเหล่านักพัฒนาเป็นอย่างมาก ปกติแล้วเวิร์ดเพรสมี post_type ในการจัดการเรื่องการแสดงผล เมื่อเราติดตั้งเวิร์ดเพรสเราจะมี post_type ที่เราสามารถใช้งานได้เลย
post_type
- Post (post type: ‘post’)
- Page (post type: ‘page’)
- Attachment (post type: ‘attachment’)
- Revision (post type: ‘revision’)
- Navigation menu (post type: ‘nav_menu_item’)
แต่ถ้าจะนำเวิร์ดเพรสมาใช้กับเว็บไซต์ที่มีความเฉพาะเจาะจงของเนื้อหามากขึันมาหน่อย เราอาจจะต้องมีการใช้งาน post type ที่เราสามารถสร้างขี้นมาได้เอง ที่เรียกว่า Custom Post Type ซึ่งอนุญาตให้เราแก้ไขรายละเอียดเพิ่มเติมได้
บทความนี้จะแสดงตัวอย่างการใช้งาน Custom Post Type โดยจะสร้าง post type ที่เป็นหนังสือ (book) โดยรายละเอียดของหนังสือประกอบด้วย
- ชื่อหนังสือ (title)
- คำอธิบาย (content)
- แท็ก (tag)
- ผู้แต่ง (author) – custom field
- ราคา (price) – custom field
- ISBN (isbn) – custom field
- วันที่ตีพิมพ์ (published_date) – custom field
เราจะสร้างเป็น plugin นะครับ เพื่อที่ว่าเวลาเปลี่ยนธีม custom post ของเราก็จะยังใช้งานได้อยู่ ผมเรียก plugin นี้ว่า imooh_library (ห้องสมุด imooh) นะครับ ^^
เริ่มเลยดีกว่า สร้างไฟล์ imooh_library.php ไว้ในโฟลเดอร์ wp-contents/plugins แล้วก็ใส่คอมเม้นท์อธิบาย plugin ของเราซักหน่อย ซึ่งจะแสดงอยู่ที่หน้า plugins ของเมนูหน้า admin ครับ
<?php /*Plugin Name: Imooh Library Description: This plugin registers the 'book' post type. Version: 1.0 License: GPLv2 */ ?>
สร้างฟังก์ชันชื่อ imooh_create_book_post_type เอาไว้ตั้งค่าคอนฟิกต่างๆ ให้กับ book ของเรา จากนั้นก็ให้เรียกใช้ฟังก์ชันผ่าน init hook ของ wordpress เอง
function imooh_create_book_post_type() {
}
add_action( 'init', 'imooh_create_book_post_type' );
ต่อไปก็ตั้งค่าต่างๆ ให้กับ book post type ของเรา ซึ่งจะมี
// step 1: ตั้งค่า labels ต่างๆ ของ book post type
$labels = array(
'name' => 'Books',
'singular_name' => 'Book',
'add_new' => 'Add New Book',
'add_new_item' => 'Add New Book',
'edit_item' => 'Edit Book',
'new_item' => 'New Book',
'all_items' => 'All Books',
'view_item' => 'View Book',
'search_items' => 'Search Books',
'not_found' => 'No Books Found',
'not_found_in_trash' => 'No Books found in Trash',
'parent_item_colon' => '',
'menu_name' => 'Books',
);
// step 2: เรียกใช้ฟังก์ชัน register_post_type เพื่อสร้าง book
register_post_type( 'book', array(
'labels' => $labels,
'has_archive' => true,
'public' => true,
'supports' => array( 'title', 'editor', 'excerpt', 'custom-fields', 'thumbnail','page-attributes' ),
'taxonomies' => array( 'post_tag', 'category' ),
'exclude_from_search' => false,
'capability_type' => 'post',
'rewrite' => array( 'slug' => 'books' ),
)
);
ลองมาดูรายละเอียดซิว่าโค้ดข้างบนทำอะไรบ้าง
Step 1
ตั้งค่า labels ต่างๆ ให้กับ post type ของเรา ซึ่งจะถูกเอาไปใช้แทนค่าเริ่มต้นของ post_type เช่น Posts, Add Post
Step 2
เรียกฟังก์ชัน register_post_type() เพื่อบอกให้เวิร์ดเพรสรู้ว่าเราจะเพิ่ม post type ใหม่ด้วย labels ที่เราระบุไว้ในขั้นตอนแรก