ส่อง Database ของ WordPress Navigation Menus Setting

Wordpress จะมีส่วน (Appearance → Menus) ซึ่งเป็นที่ที่ใช้ตั้งค่า navigation menus โดยเมนูจะดึงมาจาก Pages และ Posts ที่ถูกสร้างขึ้นใน WordPress Site วิธีการสร้างและใช้งาน Navigation Menus จะไม่ลงรายละเอียด แต่จะพาไปดูว่า WordPress มีการจัดเก็บ Navigation Menus ใน Database อย่างไร

Navigation Menu เป็น Custom Post Type รูปแบบหนึ่ง สามารถสร้างเมนูได้มากกว่าหนึ่งเมนู ทุกครั้งที่มีการสร้างหรืออัพเดท ข้อมูลต่างๆของแต่ละเมนูจะถูกจัดเก็บลงในหลาย table บน Database

ตาราง _term_taxonomy: จัดเก็บ taxonomy และ value ของ 'nav_menu'

- จากภาพจะเห็นว่ามี 2 taxonomy ที่เป็น 'nav_menu' เนื่องจาก site ตัวอย่างได้สร้างไว้ 2 เมนู คือ 'Main Navigation Menu' และ 'Hot News Menu'

- แต่ละ taxonomy ที่เป็น 'nav_menu' จะมี 'term_id' ซึ่งเชื่อมโยงกับ 'name' และ 'slug' ที่อยู่ในตาราง _terms

- count จะเท่ากับจำนวน item ที่มีในแต่ละเมนู จากตัวอย่าง 'Main Navigation Menu' มีทั้งหมด 9 items

ตาราง _term: จัดเก็บ 'name', 'slug' และ 'term_id' ของเมนู

ตาราง _term_relationship: ประกอบด้วย 'term_texonomy_id', 'object_id'

- มี 'term_texonomy_id' ที่ตรงกันกับ 'term_id'

- และ 'object_id' list ที่เชื่อมโยงกับในตาราง _post (นั่นคือ menu items)

ตัวอย่าง SQL Query: ต้องการทราบว่าเมนู 'main navigation menu' ประกอบด้วย 'object_id' อะไรบ้าง
*** 24 คือหมายเลข site_id
SELECT `wp_24_term_relationships`.`object_id` , `wp_24_terms`.`name` , `wp_24_terms`.`slug`
FROM wp_24_term_relationships
INNER JOIN wp_24_terms ON `wp_24_term_relationships`.`term_taxonomy_id` = `wp_24_terms`.`term_id`
WHERE `wp_24_terms`.`name` = `main navigation menu`
LIMIT 0 , 30

ผลลัพธ์ทีไ่ด้

ตาราง _post: มี object list ที่ 'post_type' เป็น 'nav_menu_item'

ตาราง _post_meta: มีข้อมูลที่เกี่ยวข้องกับเมนู object ในตาราง _posts 
('_menu_item_object', '_menu_item_object_id', '_menu_item_menu_item_parent', '_menu_item_url' ,...)

นี่เป็นเพียงส่วนหนึ่งของ Database WordPress Version 3.6 ติดตั้งแบบ Multi Site Network

การเขียน SQL Query บน WordPress Database สามารถศึกษาเพิ่มเติมได้ที่ Interfacing With the Database และ Database Description


Mils Burasakorn

Mils Burasakorn