โฟลวที่เหมาะสมสำหรับข้อมูลที่กำหนดเองจาก URL ใน WP_Query คืออะไร


14

ฉันมีกระบวนการหลายขั้นตอนที่รวม faceting ที่ซับซ้อนลงในแบบสอบถาม WP ปัญหาคือ - ยิ่งฉันได้รับยิ่งเลือนยิ่งขึ้นฉันควรทำงานอย่างไรและฉันสามารถใช้แนวทางมากกว่าที่จะสร้างสรรค์ (และขุดหลุมเอง)

ขั้นตอนทั่วไปที่ฉันมี (หลอกโค้ด แต่ใกล้เคียงจริง):

  1. ดึงค่าจาก URL (สิ่งที่ง่ายเหมือนperson=1)
  2. มูลค่ากระบวนการและคำแนะนำแบบสอบถามแบบกำหนดเองต่อท้าย ( $relationship_query[] = array('relationship' => 'person_to_cat', 'object' => 1 );)
  3. ดึงคำแนะนำแบบสอบถามที่กำหนดเองขั้นสุดท้ายและสร้างคำสั่ง SQL ที่เหมาะสม

โดยตอนนี้ฉันมีจำนวนมากเกิดขึ้น (ความสัมพันธ์, taxonomies, วันที่) และมันกลายเป็นความเปราะบาง (หนึ่งมุมของรหัสไม่ได้ใส่ค่าที่มุมของรหัสอื่น ๆ คาดว่าจะพบและทุกอย่างแยกกัน)

ดังนั้นคำถามที่มีขนาดใหญ่ - โปรโตคอลที่เหมาะสมในการส่งผ่านรับจัดเก็บและประมวลผลข้อมูลที่กำหนดเองไปยัง WP ผ่าน URLคืออะไร?

ชิ้นส่วนขนาดเล็ก:

  • จะมั่นใจได้อย่างไรว่าฉันไม่ได้ชนกับ WP internals?
  • ฉันจะเก็บข้อมูลตัวกลางได้ที่ไหนและอย่างไร
    • ความแตกต่างระหว่างqueryและquery_varsคุณสมบัติ? ดูเหมือนว่าพวกเขาจะถูกนำมาใช้เกือบเหมือนกันในรหัส แต่พวกเขามีแนวโน้มที่จะเก็บค่าที่แตกต่างกันและวิธีการสนับสนุนquery_varsหนึ่ง

คำตอบ:


6

ผมคิดว่าฟังก์ชั่น WP คุณกำลังมองหาคือadd_rewrite_tag โดยมีจุดมุ่งหมายเพื่อเพิ่ม params GET ที่กำหนดเองเพื่อ URL query_varsของคุณและรวมไว้โดยอัตโนมัติ

ตัวอย่างเช่นคุณสามารถเพิ่มสิ่งต่อไปนี้ลงในตะขอเกี่ยว init:

add_rewrite_tag('%person%','([^&]+)');

สำหรับ URL เช่นhttp://example.com?person=joeโลก$wp_queryจะมี

$wp_query->query_vars['person'] = 'joe'

คุณยังสามารถเพิ่มกฎการเขียนซ้ำเพื่อทำให้ URL สวยขึ้นเช่นhttp://example.com/person/joe

add_rewrite_rule('^person/([^/]*)/?','index.php?person=$matches[1]','top');

ดูRewrite APIสำหรับข้อมูลและตัวอย่างเพิ่มเติม


2
ผมพบว่าบางเวลา (ที่ผ่านมา) ในการอ่านรหัสผ่านที่เกี่ยวข้องทั้งหมดในWPและWP_Queryและในขณะที่มีจำนวนมากของสิ่งที่เกิดขึ้นที่นั่นผมคิดว่าadd_rewrite_tag()ดูเหมือนว่าวิธีรวบรัดมากที่สุดเพื่อให้ตระหนักถึงความ WP var แบบสอบถามที่กำหนดเองและเล่นได้ดีกับมัน
Rarst

1
  1. ลองใช้ wp-include / class-wp.php เพื่อตรวจสอบ query_vars ที่สงวนไว้
  2. ฉันไม่แน่ใจว่าคุณหมายถึงข้อมูลตัวกลาง คุณอธิบายเพิ่มเติมได้ไหม
  3. WP โหลดหน้าเว็บขึ้นอยู่กับ query_string บน URL ซึ่งแปลเป็นแบบสอบถามจากนั้นจะดำเนินการโดย WP_Query เพื่อพิจารณาว่าจะใช้ query_var ใด

ตัวอย่าง: โดยการโหลดหน้าเว็บที่มี /? pagename = about, WP จะประมวลผลสตริงข้อความค้นหาและค้นหา query_var ที่ใช้งานอยู่คือ page_id

อีกตัวอย่าง: /? cat = 1, /? category_name = uncategorized และ / category / uncategorized มี query_var 'cat' เดียวกัน


0

ฉันจะสันนิษฐานว่ามันจะทำผ่าน$_GETและ / หรือ$_POSTจากนั้นจัดการตาม

หรือมิฉะนั้นให้จัดเก็บข้อมูลจำนวนมากไว้ในฐานข้อมูลแล้วแยกวิเคราะห์รหัสไปยัง URL อย่างนั้น

$data_id = $_GET['id'];

$data = $wpbd->get_results("SELECT * FROM wp_epic_table WHERE id=".$id);

แน่นอนว่าแบบสอบถามจะไม่ง่ายอย่างนั้นมันอาจเกี่ยวข้องกับการรวมและเข้าร่วมจำนวนมาก นั่นคือสิ่งที่ฉันทำในหน้าใดหน้าหนึ่งของฉันแยกวิเคราะห์รหัสเฉพาะแล้วสร้างข้อมูลผ่าน MySQL

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.