ทำความรู้จัก Custom Post Type ของ WordPress

เวิร์ดเพรส (WordPress) เป็นเครื่องมือที่ใช้ในการสร้างเว็บไซต์ที่มีความยืดหยุ่นสำหรับเหล่านักพัฒนาเป็นอย่างมาก ปกติแล้วเวิร์ดเพรสมี post_type ในการจัดการเรื่องการแสดงผล เมื่อเราติดตั้งเวิร์ดเพรสเราจะมี post_type ที่เราสามารถใช้งานได้เลย

post_type

  1. Post (post type: ‘post’)
  2. Page (post type: ‘page’)
  3. Attachment (post type: ‘attachment’)
  4. Revision (post type: ‘revision’)
  5. Navigation menu (post type: ‘nav_menu_item’)

แต่ถ้าจะนำเวิร์ดเพรสมาใช้กับเว็บไซต์ที่มีความเฉพาะเจาะจงของเนื้อหามากขึันมาหน่อย เราอาจจะต้องมีการใช้งาน post type ที่เราสามารถสร้างขี้นมาได้เอง ที่เรียกว่า Custom Post Type ซึ่งอนุญาตให้เราแก้ไขรายละเอียดเพิ่มเติมได้

บทความนี้จะแสดงตัวอย่างการใช้งาน Custom Post Type โดยจะสร้าง post type ที่เป็นหนังสือ (book) โดยรายละเอียดของหนังสือประกอบด้วย

  1. ชื่อหนังสือ (title)
  2. คำอธิบาย (content)
  3. แท็ก (tag)
  4. ผู้แต่ง (author) – custom field
  5. ราคา (price) – custom field
  6. ISBN (isbn) – custom field
  7. วันที่ตีพิมพ์ (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() {</p>
<p>}<br />
add_action( 'init', 'imooh_create_book_post_type' );

ต่อไปก็ตั้งค่าต่างๆ ให้กับ book post type ของเรา ซึ่งจะมี

// step 1: ตั้งค่า labels ต่างๆ ของ book post type<br />
$labels = array(<br />
 	'name' =&gt; 'Books',<br />
    	'singular_name' =&gt; 'Book',<br />
    	'add_new' =&gt; 'Add New Book',<br />
    	'add_new_item' =&gt; 'Add New Book',<br />
    	'edit_item' =&gt; 'Edit Book',<br />
    	'new_item' =&gt; 'New Book',<br />
    	'all_items' =&gt; 'All Books',<br />
    	'view_item' =&gt; 'View Book',<br />
    	'search_items' =&gt; 'Search Books',<br />
    	'not_found' =&gt;  'No Books Found',<br />
    	'not_found_in_trash' =&gt; 'No Books found in Trash',<br />
    	'parent_item_colon' =&gt; '',<br />
    	'menu_name' =&gt; 'Books',<br />
    );</p>
<p>// step 2: เรียกใช้ฟังก์ชัน register_post_type เพื่อสร้าง book<br />
register_post_type( 'book', array(<br />
		'labels' =&gt; $labels,<br />
		'has_archive' =&gt; true,<br />
 		'public' =&gt; true,<br />
		'supports' =&gt; array( 'title', 'editor', 'excerpt', 'custom-fields', 'thumbnail','page-attributes' ),<br />
		'taxonomies' =&gt; array( 'post_tag', 'category' ),<br />
		'exclude_from_search' =&gt; false,<br />
		'capability_type' =&gt; 'post',<br />
		'rewrite' =&gt; array( 'slug' =&gt; 'books' ),<br />
		)<br />
	);

ลองมาดูรายละเอียดซิว่าโค้ดข้างบนทำอะไรบ้าง
Step 1
ตั้งค่า labels ต่างๆ ให้กับ post type ของเรา ซึ่งจะถูกเอาไปใช้แทนค่าเริ่มต้นของ post_type เช่น Posts, Add Post
Step 2
เรียกฟังก์ชัน register_post_type() เพื่อบอกให้เวิร์ดเพรสรู้ว่าเราจะเพิ่ม post type ใหม่ด้วย labels ที่เราระบุไว้ในขั้นตอนแรก