ใน WordPress URL จะไม่จับคู่กับเส้นทาง พวกเขาแมปแบบสอบถามฐานข้อมูล
เมื่อใช้ WordPress ในโหมด "เริ่มต้น" ลิงก์ถาวรคุณมีชุดของตัวแปรในการสืบค้น URL หลักเช่น? p = 1 หรือ? page = 234 เป็นต้น นอกจากนี้ยังมี? s = การค้นหาและอื่น ๆ อีกมากมาย
หากคุณใช้ permalinks "สวย" แล้วชุดใหญ่ของกฎที่เรียกว่า "กฎการเขียนซ้ำ" จะถูกสร้างขึ้นซึ่งแมปรูปแบบ URL ต่างๆโดยตรงกับพารามิเตอร์ URL ชุดเดียวกันนี้ ดังนั้น URL เช่น / 2014/04/12 / ตัวอย่างจะจับคู่กับ? year = 2014 & month = 04 & day = 12 & postname = example หรือคล้ายกัน ดังนั้นสิ่งต่อไปนี้ใช้กับสิ่งเหล่านี้เช่นกันหลังจากการทำแผนที่นี้เสร็จสิ้น
ตัวแปรเหล่านี้ควบคุมอินสแตนซ์หลักของคลาส WP_Query เป็นหลัก คลาส WP_Query เก็บข้อมูลทั้งหมดที่สร้างแบบสอบถามฐานข้อมูลเพื่อรับ "โพสต์" จากฐานข้อมูล พารามิเตอร์ต่างๆที่ส่งผ่านเข้าไปควบคุมประเภทของเคียวรีที่สร้างและข้อมูลที่ได้รับ
ดูทุกสิ่งที่ WordPress สามารถแสดงได้นั้นเป็น "โพสต์" บล็อกคือชุดของโพสต์ในลำดับตามเวลาย้อนกลับ "หน้า" เป็นโพสต์สแตติกที่มีชื่อที่กำหนดไว้ "โพสต์ที่กำหนดเองประเภท" เป็นสิ่งที่ดูเหมือนว่า "โพสต์" กับประเภทที่กำหนดเองที่คุณกำหนด ข้อความค้นหาหลักทั้งหมดเพื่อแสดงอะไรใน WordPress กำลังได้รับส่วนย่อยของโพสต์จากตาราง wp_posts
WP_Query คือสิ่งที่ทำ และพารามิเตอร์จาก URL จะถูกส่งโดยตรงไปยังคิวรีหลักนั้นและใช้ที่นั่น
ชุดรูปแบบจะกำหนดแม่แบบที่จะใช้โดยขึ้นอยู่กับสิ่งที่แบบสอบถามกลับมา หากคุณร้องขอ / category / example นั่นจะกลายเป็น? category_name = example ซึ่งหมายความว่าอาร์เรย์ $ wp_query-> query_vars หลักจะได้รับข้อมูลนั้นและ WP_Query จะดึงโพสต์ X สุดท้ายสำหรับหมวดหมู่ "ตัวอย่าง" และมัน จะตั้งค่าสถานะ is_category เป็นจริง
เทมเพลตโหลดเดอร์จะทำงานหลังจากนี้ดูว่า is_category () จะคืนค่าจริงและตัดสินใจเลือกเทมเพลตหมวดหมู่ดังนั้นมันจะมองหา category-example.php และถอยกลับไปที่ category.php และอื่น ๆ ตามเทมเพลต ลำดับชั้น
ดังนั้นคำถามหากคุณต้องการเปลี่ยนวิธีการทำงานของ URL อย่างง่าย: คุณต้องการเปลี่ยน URL หรือสิ่งที่ถูกแมปไปหรือไม่ เนื่องจาก URL ไม่ได้ถูกแมปเข้ากับฟังก์ชันพวกเขาจึงถูกแมปกับพารามิเตอร์ที่ควบคุมการสืบค้น หากคุณต้องการให้ URL ปรับการสืบค้นหลักนั้นก็เป็นกระบวนการที่แตกต่างกันเล็กน้อยถ้าคุณต้องการให้ URL พิเศษเรียกใช้รหัสพิเศษอื่นทั้งหมด
และเพื่อตอบคำถามเฉพาะของคุณในความคิดเห็น: "ไม่มีกรณีที่คุณไม่ต้องการแสดงบทความหรือไม่" ไม่ไม่มี ทุกอย่างคือโพสต์ เนื้อหาทั้งหมดถูกเก็บไว้ในโพสต์ หากคุณต้องการจัดเก็บเนื้อหาจากที่อื่นและแตกต่างคุณสามารถทำได้ แต่มันยากกว่าเพราะโดยความจริงแล้วปกติแล้วมันไม่จำเป็น หากคุณมีเนื้อหาพิเศษให้สร้างประเภทโพสต์ที่กำหนดเองจัดเก็บเนื้อหาของคุณเป็นโพสต์ที่มีประเภทนั้นแมปรูปแบบ URL ไปที่มัน ง่าย.