เวิร์ดเพรส (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 ที่เราระบุไว้ในขั้นตอนแรก