Post Meta หรือที่รู้จักกันดีในอีกชื่อ Custom Field
Custom Field คือฟิลด์ที่เราสร้างขึ้นมาเอง
ทำไมเราต้องสร้างฟิลด์ขึ้นมาใหม่ด้วย
WordPress จะมี Post และ Page (ซึ่ง Page ก็คือ Post ที่มี Post Type เป็น Page) ที่เราเอาไว้ใช้ในการจัดการกับ content ต่างๆ ตามที่เราต้องการ ทั้ง Post และ Page นั้น เราก็สามารถที่จะเขียน content ต่างๆ และมีเครื่องมือในการจัดเก็บข้อมูลหรือจัดเก็บ content เช่น Title, Content, หรือ Categories เป็นต้น ที่เราคุ้นเคยกันในส่วนของ WP Admin
แต่ถ้าเครื่องมือเหล่านี้มันไม่เพียงพอต่อความต้องการในการเก็บข้อมูลให้เหมาะสมอย่างที่เราต้องการล่ะ? จึงเป็นที่มาของ Post Meta
ถ้าในบริษัทของเรา มีความต้องการในการเก็บข้อมูลของพนักงาน
ชื่อ-นามสกุล วันเกิด เบอร์โทรศัพท์ ที่อยู่ เงินเดือน อีเมล์
หากใช้เพียงแค่ Post หรือ Page ธรรมดา ก็จะจัดเก็บข้อมูลทุกอย่างเป็นแบบ Plain Text
การค้นหาข้อมูล และการจัดระเบียบข้อมูลตอนแสดงผล ทำได้ยาก
สร้าง Post Type ขึ้นมา 1 อัน ใช้ชื่อ “employee” ภายใน Post Type มี field ต่างๆ ที่สร้างขึ้นมา เช่น field firstname, lastname หรือ birthday เป็นต้น ใช้ในการจัดเก็บข้อมูลของพนักงาน ซึ่ง Post Meta หรือ Custom Field นี้ จะมีการจัดเก็บข้อมูลเป็นแบบ Key-Value Pair
Fuction/Method หลักๆ ที่เราเอาไว้จัดการกับ Post Meta
- add_post_meta() – เป็นฟังก์ชันสำหรับการสร้าง Post Meta
<?php add_post_meta( $post_id, $meta_key, $meta_value, $unique ); ?>
$post_id (required) คือรหัส (ID) ของ Post ที่เราต้องการสร้าง Post Meta
$meta_key (required) คือชื่อ (key) ของ Post Meta ที่เราต้องการสร้าง
$meta_value (required) คือค่า (value) ของ Post Meta ที่เราต้องการสร้าง
$unique (optional) จะมีค่าเป็น Boolean นั่นคือ true กับ false โดย default จะเป็น false ถ้าเรา set ให้ $unique เป็น true ก็จะหมายถึง Post Meta ที่เราต้องการจะสร้าง จะต้องไม่เคยมีอยู่ใน Post นี้
- update_post_meta() – เป็นฟังก์ชันสำหรับการอัพเดทหรือแก้ไข Post Meta
<?php update_post_meta( $post_id, $meta_key, $meta_value, $prev_value ); ?>
$post_id (required) คือรหัส (ID) ของ Post ที่เราต้องการอัพเดท Post Meta
$meta_key (required) คือชื่อ (key) ของ Post Meta ที่เราต้องการอัพเดท
$meta_value (required) คือค่า (value) ของ Post Meta ที่เราต้องการอัพเดท
$prev_value (optional) คือค่าเดิม (previous value) ของ Post Meta ก่อนการอัพเดท เนื่องจากใน Post Meta อาจมี Meta Value ได้หลายค่า หากเราต้องการจะเปลี่ยน Meta Value เพียงแค่ตัวเดียว ก็จำเป็นที่จะต้องใส่ค่าให้ $prev_value เพื่ออัพเดท Meta Value ได้ถูกต้อง หากเราไม่ใส่ $prev_value ก็จะเปลี่ยนแปลงค่าทุกตัวเหมือนกัน
- delete_post_meta() – เป็นฟังก์ชันสำหรับการลบ Post Meta
<?php delete_post_meta( $post_id, $meta_key, $meta_value ); ?>
$post_id (required) คือรหัส (ID) ของ Post ที่เราต้องการลบ Post Meta
$meta_key (required) คือชื่อ (key) ของ Post Meta ที่เราต้องการลบ
$meta_value (optional) คือค่า (value) ของ Post Meta ที่เราต้องการลบ หากเราไม่ใส่ค่าให้กับ $meta_value ก็จะลบค่าทั้งหมด
- get_post_meta() – เป็นฟังก์ชันสำหรับการรีทรีฟหรือดึงค่า Post Meta
<?php $meta_value = get_post_meta( $post_id, $key, $single ); ?>
$post_id (required) คือรหัส (ID) ของ Post ที่เราต้องการจะดึงค่า Post Meta โดยเราจะใช้ฟังก์ชัน get_post_ID() หรือ global object $post->ID ในการ get ID ของ post ก็ได้
$key (optional) คือ Meta Value ที่เราต้องการจะดึงค่าออกมา
$single (optional) เป็น Boolean ถ้าเรา set ค่า $single ให้เป็น true ค่าที่เราดึงออกมาจะมีลักษณะเป็น string ธรรมดา แต่ถ้าหากเราไม่ได้ set ค่าอะไร default ของ $single ก็เป็น false ซึ่งค่าที่ออกมาจะเป็น array
สร้าง Custom Post Type ขึ้นมาอยู่ก่อนหน้านี้แล้วอันหนึ่ง ชื่อว่า “employee” และมีพนักงานชื่อ Emily ที่มี Post ID เท่ากับ 77 แล้วเราก็มี Meta Box สำหรับรับข้อมูลเตรียมไว้อยู่แล้ว โดยใน employee จะต้องมีส่วนที่ใช้เก็บข้อมูลต่างๆ ของพนักงาน ได้แก่ ชื่อ-นามสกุล วัน/เดือน/ปีเกิด เบอร์โทรศัพท์ ที่อยู่ เงินเดือน และอีเมล์
เริ่มสร้าง Post Meta
สร้างฟังก์ชั่นสำหรับอัพเดทค่า Post Meta ของเรา หากไม่มี Post Meta มาก่อนเลย ฟังก์ชั่น update_post_meta จะไปเรียกฟังก์ชั่น add_post_meta ให้เราเอง
<?php
function update_employee_information( $post_id ) {
if ( 'employeee' == $_POST['post_type'] ) {
update_post_meta( $post_id, 'employee_first_name', $_POST['employee_first_name'] );
update_post_meta($post_id, 'employee_last_name', $_POST['employee_last_name'] );
update_post_meta($post_id, 'employee_birthday', $_POST['employee_birthday'] );
update_post_meta($post_id, 'employee_phone', $_POST['employee_phone'] );
update_post_meta($post_id, 'employee_address', $_POST['employee_address'] );
update_post_meta($post_id, 'employee_salary', $_POST['employee_salary'] );
update_post_meta($post_id, 'employee_email', $_POST['employee_email'] );
}
}
?>
จากนั้นเราก็แค่เพิ่มฟังก์ชั่นเราใน hook ที่ชื่อ save_post ก็เป็นอันเสร็จสิ้น
<?php
add_action( 'save_post', 'update_employee_information' );
?>
หลังจากนั้น ถ้าเราต้องการดีงข้อมูลของพนักงานที่ชื่อว่า Emily เราแค่ใช้ฟังก์ชัน get_post_meta() อย่างนี้ แล้วก็ใส่ ID ของ Emily ลงไป ถ้าหากต้องการให้ผลลัพธ์เป็น String ก็อย่าลืมใส่ $single เป็น true
<?php
$first_name = get_post_meta( 77, 'employee_first_name', true );
$last_name = get_post_meta( 77, 'employee_last_name', true );
$birthday = get_post_meta( 77, 'employee_birthday', true );
$phone_number = get_post_meta( 77, 'employee_phone', true );
$address = get_post_meta( 77, 'employee_address', true );
$salary = get_post_meta( 77, 'employee_salary', true );
$email = get_post_meta( 77, 'employee_email', true );
?>
แล้วเอาไปใส่ไฟล์ไหน?
https://www.prontotools.io/ทำความรู้จักกับ-post-meta-ใน-wordpress-กั/