WordPress ไม่ใช่แค่ระบบสร้างเว็บไซต์หรือเครื่องมือในการจัดการเนื้อหาเท่านั้น แต่ยังมีฟีเจอร์ API ที่ช่วยขยายความสามารถในการพัฒนาและเชื่อมต่อกับระบบอื่นๆ ไม่ว่าคุณจะต้องการสร้างแอปพลิเคชันหรือเชื่อมต่อกับบริการต่างๆ WordPress API สามารถช่วยคุณได้ บทความนี้จะพาคุณทำความรู้จักกับ WordPress API และวิธีการนำไปใช้งานให้เกิดประโยชน์สูงสุด
สารบัญ
คนเริ่มใช้ WordPress เป็น Backend มากขึ้น
ในช่วงไม่กี่ปีที่ผ่านมา การใช้งาน WordPress ในฐานะ Backend กำลังเป็นที่นิยมมากขึ้น สาเหตุหลักมาจากการที่นักพัฒนาเริ่มหันไปใช้ React และ Vue.js ในการสร้าง Frontend และใช้ WordPress API (REST API) นั้นสามารถทำงานร่วมกับ Frameworks เหล่านี้ได้อย่างราบรื่น ทำให้ WordPress ไม่ได้เป็นแค่ระบบจัดการเนื้อหา (CMS) อีกต่อไป แต่กลายเป็นเครื่องมือที่สามารถใช้เป็น Backend ในการเก็บและส่งข้อมูลไปยัง Frontend ได้
WordPress API เริ่มต้นมีอะไรมาให้ใช้บ้าง ?
ใน WordPress REST API เวอร์ชัน 2 (/v2) ได้รวมเครื่องมือที่จำเป็นสำหรับการสร้างและจัดการข้อมูลผ่าน API เอาไว้ในตัวระบบ ซึ่งทำให้นักพัฒนาสามารถเข้าถึงและจัดการข้อมูลบนเว็บไซต์ได้อย่างสะดวก โดยการทำงานกับ REST API จะใช้รูปแบบ URL เฉพาะเพื่อเรียกข้อมูลในรูปแบบ JSON
ตัวอย่าง URL ที่ใช้ในการเข้าถึงข้อมูลผ่าน API จะมีรูปแบบดังนี้:
https://yoursite.com/wp-json/wp/v2/
ในโครงสร้าง URL นี้:
- https://yoursite.com: คือโดเมนของเว็บไซต์ WordPress ของคุณ
- /wp-json: เป็นเส้นทางพื้นฐานสำหรับการเข้าถึง REST API ของ WordPress
- /wp/v2/: เป็นเส้นทางเฉพาะที่บ่งบอกว่าคุณกำลังใช้ WordPress REST API เวอร์ชัน 2
โดยการต่อท้าย URL ด้วยเส้นทางที่เฉพาะเจาะจง คุณสามารถเข้าถึงข้อมูลต่างๆ เช่น โพสต์, เพจ, เมตาดาต้า และข้อมูลผู้ใช้ได้ ตัวอย่างเช่น:
- /posts: เพื่อดึงข้อมูลโพสต์ทั้งหมด
- /pages: เพื่อดึงข้อมูลเพจทั้งหมด
- /users: เพื่อดึงข้อมูลผู้ใช้
เมื่อคุณเข้าถึง URL นี้ คุณจะได้รับข้อมูลโพสต์ทั้งหมดในรูปแบบ JSON ซึ่งสามารถนำไปใช้งานต่อในแอปพลิเคชันหรือเว็บ Frontend ที่คุณพัฒนาได้ทันที
ตัวอย่างในการเข้าถึง REST API
การดึงข้อมูลโพสต์ (Posts)
https://yoursite.com/wp-json/wp/v2/posts
การดึงข้อมูลโพสต์ตาม ID
https://yoursite.com/wp-json/wp/v2/posts/{ID}
การดึงข้อมูลเพจ (Pages)
https://yoursite.com/wp-json/wp/v2/pages
วิธีปรับแต่ง API ด้วยตัวเอง
ถ้าคุณต้องการเพิ่มฟิลด์ข้อมูลไปยัง WordPress REST API โดยไม่ใช้ปลั๊กอินเพิ่มเติม คุณสามารถใช้ฟังก์ชัน register_rest_field ร่วมกับการใช้ hook rest_api_init ในไฟล์ functions.php ของธีมได้เลย วิธีการนี้จะทำให้คุณสามารถจัดการข้อมูลได้อย่างดีที่สุด
ตัวอย่าง ในการสร้าง field “pin” ไว้ใน API ของ /v2/posts
function add_custom_fields_to_post_api() { // ฟังก์ชั่นสำหรับเพิ่ม field ใน API register_rest_field( 'post', // ประเภทของข้อมูลที่ต้องการเพิ่มฟิลด์ 'pin', // ชื่อฟิลด์ที่ต้องการเพิ่มใน API array( 'get_callback' => 'get_post_meta_for_api', 'schema' => null, ) ); } function get_post_meta_for_api($object) { return get_post_meta($object['id'], 'pin', true); } add_action('rest_api_init', 'add_custom_fields_to_post_api');
ตัวอย่าง ในการสร้าง REST API เส้นใหม่ขึ้นมาเลย จะได้เส้นที่ชื่อว่า /v2/messages
function register_custom_api_routes() { register_rest_route( 'v2', // เวอร์ชั่น '/messages', // ชื่อ Route array( 'methods' => 'GET', // HTTP (GET, POST, etc.) 'callback' => 'get_custom_messages', // ฟังก์ชั่นที่ return ) ); } add_action('rest_api_init', 'register_custom_api_routes'); function get_custom_messages() { // รีเทิร์นข้อมูลสำหรับ API $messages = array( array( 'id' => 1, 'message' => 'Hello, this is the first custom message!', ), array( 'id' => 2, 'message' => 'Here is another custom message.', ), ); return rest_ensure_response($messages); }
การเพิ่มข้อมูล ACF ไปยัง REST API
ในเวอร์ชั่นใหม่ของ ACF มีฟีเจอร์ที่ให้คุณสามารถเปิดใช้งานการแนบข้อมูลฟิลด์ไปกับ REST API ได้ทันที โดยคุณสามารถเปิดใช้งานฟีเจอร์นี้ได้ที่หน้าการตั้งค่าของฟิลด์กรุ๊ป ACF > Field Group > Group Settings > Show in REST API
เมื่อเปิดใช้งานแล้ว ACF จะผูกฟิลด์ต่าง ๆ กับ Post Type หรือ Page ที่กำหนดไว้ และเมื่อเรียกใช้ REST API ฟิลด์เหล่านี้จะถูกรวมเข้ากับข้อมูลใน API โดยอัตโนมัติ
เพิ่มความปลอดภัยให้ REST API ทำยังไงได้บ้าง
ตัว REST API ที่ WordPress มีมาให้มีลักษณะเปิดเป็นสาธาราณะ เราสามารถใช้หลายวิธีในการป้องกันการเข้าถึงสำหรับคนทั่วไป ไม่ว่าจะเป็นการใช้ Auth, Token หรือการทำ Whitelist โดยผมจะใช้ตัวอย่างป้องกันการเข้าถึงที่ง่ายที่สุดในตอนนี้ก็คือ Whitelist
ตัวอย่างนี้ จะทำการ Whitelist โดยตรวจสอบ IP ที่เรียกใช้ API
function restrict_api_access_by_ip($result) { // รายการ IP ที่อนุญาต $allowed_ips = array( '123.456.789.000', // ใส่ข้อมูล IP ที่อนุญาตให้ใช้ API '111.222.333.444', ); // ดึง IP ที่ทำการเรียกใช้ API $ip_address = $_SERVER['REMOTE_ADDR']; // ตรวจสอบ IP ถ้าไม่ได้อยู่ในรายกาารที่ไม่อนุญาตให้แสดง error if (!in_array($ip_address, $allowed_ips)) { return new WP_Error('rest_forbidden', 'Your IP address is not allowed to access this API.', array('status' => 403)); } return $result; } add_filter('rest_authentication_errors', 'restrict_api_access_by_ip');
ตัวอย่างนี้ จะทำการ Whitelist โดยตรวจสอบ Domain ที่เรียกใช้ API
function restrict_api_access_by_domain($result) { // รายการ Domain ที่อนุญาต $allowed_domains = array( 'https://allowed-domain.com', 'https://another-allowed-domain.com', ); // ดึง Domaiin ที่ทำการเรียกใช้ API $origin = isset($_SERVER['HTTP_ORIGIN']) ? $_SERVER['HTTP_ORIGIN'] : ''; // ตรวจสอบ Domain ถ้าไม่ได้อยู่ในรายกาารที่ไม่อนุญาตให้แสดง error if (!in_array($origin, $allowed_domains)) { return new WP_Error('rest_forbidden', 'Your domain is not allowed to access this API.', array('status' => 403)); } return $result; } add_filter('rest_authentication_errors', 'restrict_api_access_by_domain');
หากคุณต้องการศึกษาเพิ่มเติมเกี่ยวกับการใช้งาน WordPress REST API คุณสามารถเข้าไปอ่านรายละเอียดเพิ่มเติมได้ที่เว็บไซต์ทางการของ WordPress โดยตรง ซึ่งมีเอกสารและตัวอย่างการใช้งานอย่างครบถ้วนที่: https://developer.wordpress.org/rest-api/