คุณควรจะสงสัยใครก็ตามที่บอกว่ามีวิธี "ถูกต้อง" เดียว วิธีที่ถูกต้องขึ้นอยู่กับสถานการณ์ การใช้โครงสร้างพื้นฐาน CPT มีประโยชน์เด่น ๆ มากมาย:
- คุณจะได้รับ Dashboard UI ได้ฟรี
- คุณใช้ประโยชน์จากการแคชของ WP โดยอัตโนมัติรวมถึงปลั๊กอินแคชถาวรใด ๆ ที่การติดตั้งอาจใช้
- คุณจะได้รับสินค้าโดยอัตโนมัติเช่นการแก้ไขโพสต์
- คุณได้รับการเข้าถึง
WP_Query
คลาสซึ่งหมายความว่าในทางทฤษฎีคุณไม่จำเป็นต้องเขียน SQL ใด ๆ (หรืออย่างน้อยไม่มาก) ที่น่าจะเป็นบั๊กกี้และอ่อนไหวและไม่มีประสิทธิภาพ
- หากคุณวางแผนที่จะกระจายปลั๊กอินหรือเปิดขึ้นเพื่อการพัฒนาโอเพ่นซอร์สคุณอาจพบว่านักพัฒนามีความสะดวกสบายมากขึ้นเมื่อใช้ประเภทโพสต์ที่กำหนดเองและฟังก์ชั่น API ที่เกี่ยวข้องมากกว่าสิ่งที่คุณกำหนดเอง
ปัญหาเกี่ยวกับ CPT API ส่วนใหญ่เกิดจากข้อเท็จจริงที่ว่ามันแต่งงานอย่างมากกับคำอุปมาของ 'โพสต์' และทุกแง่มุมของประเภทข้อมูลนั้นที่มาพร้อมกับคำอุปมา จากบรรทัดคำสั่ง MySQL DESCRIBE wp_posts
เรียกใช้ WP ถือว่าเนื้อหาของคุณมีชื่อเรื่องซึ่งมีผู้แต่ง (คนเดียว) ที่คุณจะต้องติดตามวันที่สร้างและวันที่แก้ไขครั้งล่าสุดเท่านั้นคุณจะต้องมีที่ว่างสำหรับการทำดัชนีpost_content
ฯลฯ ดีสำหรับเนื้อหาบางประเภท แต่ไม่จำเป็นสำหรับผู้อื่น คุณได้สัมผัสกับปัญหาที่อาจเกิดขึ้นแล้ว:
จำนวนโพสต์ metafields ที่ฉันต้องการสำหรับฟิลด์พิเศษของฉันต่อ cpt ถ้าฉันไปเส้นทางนั้นและหากนั่นจะทำให้สิ่งต่าง ๆ "ยุ่งยาก"
มีสองวิธีในการเพิ่มwp_posts
สคีมาผ่าน CPT API: postmeta และ taxonomies Postmeta เป็นคู่คีย์ - ค่าที่ไม่ได้จัดทำดัชนีซึ่งเหมาะสำหรับการจัดเก็บข้อมูลเบ็ดเตล็ดจำนวนมาก แต่ไม่เหมาะสำหรับการค้นหาที่ซับซ้อน Taxonomies มีความยืดหยุ่นมากกว่าในเรื่องนี้ แต่คุณยังต้องเผชิญกับคำถามย่อยที่อาจมีค่าใช้จ่ายสูงหากคุณมีการค้นหาที่ซับซ้อนมาก ( meta_query
และtax_query
ข้อโต้แย้งและชั้นเรียนตัวสร้างแบบสอบถามของพวกเขาดีมากและมีประโยชน์ แต่)
หากตามที่คุณแนะนำคุณจะต้องทำ "ตัวกรองเชิงสัมพันธ์เชิงกึ่งซับซ้อน" เหล่านี้ในกรณีที่มีการรายงานเป็นครั้งคราวสถาปัตยกรรมนี้น่าจะเหมาะสมสำหรับคุณ เมื่อคุณเริ่มเปิดเผยตัวกรองแก่ผู้ใช้ดังนั้นคุณจะต้องเรียกใช้งานที่ซับซ้อนJOIN
และแบบสอบถามย่อยตลอดเวลาเพื่อให้สิ่งต่างๆหลุดมือไปอย่างรวดเร็ว
ทำอย่างไรจึงจะจัดการความสัมพันธ์ได้ดีที่สุดโดยเฉพาะถ้าฉันมีความสัมพันธ์หลายอย่าง
ความสัมพันธ์แบบหลายต่อหลายเป็นจุดยึดยาวนานในชุมชน WP dev (ดูhttps://core.trac.wordpress.org/ticket/14513 ) คุณสามารถปลอมมันได้โดยไม่ต้องใช้ตารางที่กำหนดเองโดยการแมปรายการ taxonomy ลงใน post_ids (เช่นคุณสามารถพูดได้ว่า 'P3 มีความสัมพันธ์ Y ถึง P5' โดยบอกว่า P3 มีแท็ก 'Y-P3') แต่สิ่งนี้ทำให้เกิดความสับสน (และไม่มีประสิทธิภาพ) อย่างรวดเร็วมาก คุณอาจพิจารณาสร้างตารางความสัมพันธ์ของคุณเองที่เชื่อมโยง CPT เข้าด้วยกัน - คุณยังคงได้รับประโยชน์จาก CPT และจะสร้างตาราง DB เดียวเท่านั้น สำหรับวิธีนี้ในเวอร์ชันที่ดำเนินการอย่างดีโปรดดูปลั๊กอินโพสต์โพสต์ 2: https://wordpress.org/extend/plugins/posts-to-posts/
ดังนั้นในที่สุดคุณควรตัดสินใจตาม:
- ประเภทของข้อมูลที่คุณจะจัดเก็บ - วิธีการ "โพสต์" เป็นอย่างไร
- ประเภทของแบบสอบถามที่จะต้อง - พวกเขาจะซับซ้อนเพียงใด
- สเกล - ความซับซ้อนของสคีมาที่คุณต้องการจำนวนวัตถุทั้งหมดที่คุณมีและจำนวนผู้ใช้ที่คุณคาดหวัง
หากคำตอบคือ: โพสต์มากไม่ซับซ้อนเกินไปและไม่ต้องขยายขนาดใหญ่เกินไปให้ไปกับ CPT มิฉะนั้นพิจารณาตารางของคุณเอง