ทำความรู้จักกับ Post Meta ใน WordPress กันเถอะ!

สวัสดีชาว Geek WordPress ทุกๆ ท่านนะคะ.. วันนี้เราจะมาว่ากันถึงความมหัศจรรย์และความเทพของ WordPress ที่หลายๆ ท่านอาจจะรู้จักกันดี นั่นคือ Post Meta หรือที่รู้จักกันดีในอีกชื่อ ก็คือ.. Custom Field ค่ะ

credit: http://www.wpwebhost.com/

credit ภาพ: http://www.wpwebhost.com/wordpress-coffee-mug-giveaways/

Q: Post Meta หรือ Custom Field มันคืออะไรนะ..?

A: ถ้าเราแปลความหมายของคำว่า  Custom Field แบบตรงตัว จากภาษาอังกฤษเป็นภาษาไทยเลยเนี่ย.. ก็จะรู้เลยว่ามันก็คือฟิลด์ที่เราสร้างขึ้นมาเอง.. และอาจจะเกิดคำถามในใจของหลายๆ คนว่า..

Q: ทำไมเราต้องสร้างฟิลด์ขึ้นมาใหม่ด้วยล่ะ?

A: โดยทั่วไปแล้ว ใน WordPress จะมี Post และ Page (ซึ่ง Page ก็คือ Post ที่มี Post Type เป็น Page นั่นเอง) ที่เราเอาไว้ใช้ในการจัดการกับ content ต่างๆ ตามที่เราต้องการ ทั้ง Post และ Page นั้น เราก็สามารถที่จะเขียน content ต่างๆ และมีเครื่องมือในการจัดเก็บข้อมูลหรือจัดเก็บ content เช่น Title, Content, หรือ Categories เป็นต้น ที่เราคุ้นเคยกันในส่วนของ WP Admin แต่ถ้าเครื่องมือเหล่านี้มันไม่เพียงพอต่อความต้องการในการเก็บข้อมูลให้เหมาะสมอย่างที่เราต้องการล่ะ? นี่แหละค่ะ ที่มาของ Post Meta

แต่บอกเพียงเท่านี้ คงจะยังไม่เห็นภาพกันสักเท่าไร ถ้าอย่างนั้น.. เราจะมายกตัวอย่างง่ายๆ ของการสร้าง Post Meta หรือ Custom Field ที่ทำให้ชีวิตง่ายขึ้นกันนะคะ..

ยกตัวอย่างเช่น ถ้าในบริษัทของเรา มีความต้องการในการเก็บข้อมูลของพนักงาน ซึ่งต้องจัดเก็บข้อมูลที่มีทั้ง ชื่อ-นามสกุล วันเกิด เบอร์โทรศัพท์ ที่อยู่ เงินเดือน อีเมล์ ถ้าหากเราใช้เพียงแค่ Post หรือ Page ธรรมดา ก็จะจัดเก็บข้อมูลทุกอย่างเป็นแบบ Plain Text ซึ่งถ้าหากเรามีพนักงานในบริษัทเพียงแค่ 5-6 คน ก็สามารถทำได้ แต่ถ้าในบริษัทแห่งนี้มีพนักงานเป็นร้อยๆ คนล่ะ? แน่นอนค่ะ.. การค้นหาข้อมูลของพนักงานแต่ละคน และการจัดระเบียบข้อมูลตอนแสดงผล คงจะทำได้ยากซะเหลือเกิน ดังนั้น เพื่อทำให้ชีวิตง่ายขึ้น เราก็อาจจะสร้าง Post Type ขึ้นมาสัก 1 อัน อาจจะใช้ชื่อว่า.. "Employee" แล้วภายใน Post Type นี้ ก็จะมี field ต่างๆ ที่เราสร้างขึ้นมา เช่น field firstname, lastname หรือ birthday เป็นต้น ใช้ในการจัดเก็บข้อมูลของพนักงาน ซึ่ง Post Meta หรือ Custom Field นี้ จะมีการจัดเก็บข้อมูลเป็นแบบ Key-Value Pair ค่ะ เพียงเท่านี้เราก็จะได้การจัดเก็บข้อมูลที่มีความเป็นระเบียบมากขึ้น ง่ายต่อการค้นหาหรือเอาไปใช้งานอื่นๆ

เป็นอย่างไรบ้างคะ? จากตัวอย่างข้างบน หลายๆ คนคงมีความตื่นเต้นกับความเทพของ Post Meta และอยากจะเรียนรู้กับมันมากขึ้นแล้วสินะ.. ถ้าเช่นนั้น เรามาดูกันนะคะ ว่าการสร้าง Post Meta หรือ Custom Field ทำได้อย่างไร?

เราจะมาดูกันว่า Fuction/Method หลักๆ ที่เราเอาไว้จัดการกับ Post Meta มีอะไรบ้าง? มีการใช้งานฟังก์ชันอย่างไร? และมี Syntax อย่างไร? โดยลิงค์ไปยัง http://codex.wordpress.org/ ที่เป็น Document ให้อ่านเพิ่มเติมสำหรับ WordPress Developer

  • 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

เมื่อเรารู้กันอย่างคร่าวๆ แล้วว่าแต่ละฟังก์ชันที่เกี่ยวข้องกับ Post Meta มีการใช้งานอย่างไร และ parameters ที่จำเป็นในการใช้งานของแต่ละฟังก์ชันมีอะไรบ้าง ต่อไปเราก็มาลองดูตัวอย่างการใช้งานกันจริงๆ เลยดีกว่า.. ซึ่งเพื่อให้เห็นภาพของการจัดการข้อมูลของพนักงานในบริษัท ที่เคยได้ยกตัวอย่างกันไปแล้ว เราจะใช้โจทย์นี้นี่แหละ ในการเล่นกับ Post Meta

สมมติว่าเราสร้าง 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 );
?>

หวังว่าทุกๆ คน คงจะได้รับความรู้เกี่ยวกับ Post Meta และสำหรับ WordPress Developer มือใหม่ จะนำความรู้ที่ได้ ซึ่งอาจจะไม่ใช่เรื่องที่ใหม่นักไปใช้ให้เกิดประโยชน์ได้นะคะ

References:


Mils Burasakorn

Mils Burasakorn

  • Thirawat Luedet

    แนะนำได้ดีเลยครับ ผมกำลังหาข้อมูลไปทำเว็บไซต์ให้สมบูรณ์
    ว่าแต่ผู้เขียนน่ารักจัง^^

  • Taweesak Santiyanonwong

    เราต้องไปเขียนตรงไหนเหรอครับ