แบบสอบถามเทมเพลตหน้าด้วย WP_Query


14

ฉันต้องการสืบค้นเฉพาะหน้าที่มีเทมเพลตหน้าที่มีWP_Queryหรือฟังก์ชันที่จะส่งคืนออบเจกต์โพสต์ แต่ฉันไม่พบข้อมูลใด ๆ เกี่ยวกับสิ่งนั้นใน codex ที่เป็นทางการ

คำตอบ:


23

ลองนี้ ... สมมติว่าชื่อเทมเพลตคือ 'my_template.php'

$query = new WP_Query(
    array(
        'post_type' => 'page',
        'meta_key' => '_wp_page_template',
        'meta_value' => 'my_template.php'
    )
);
//Down goes the loop...

คุณยังสามารถใช้get_postsหรือแก้ไขโพสต์แบบสอบถามเพื่อให้งานเสร็จ ทั้งฟังก์ชั่นเหล่านี้ใช้พารามิเตอร์เดียวกับWP_Query


20

ไม่ถูกต้อง: ตั้งแต่ WordPress 3 คุณต้องการบางสิ่งบางอย่างคล้ายกับ:

$args = array(
    'post_type'  => 'page', 
    'meta_query' => array( 
        array(
            'key'   => '_wp_page_template', 
            'value' => 'my_template.php'
        )
    )
);

ขอบคุณ!! อ่านอย่างรวดเร็วทางหน้านี้เร็วเกินไปใช้คำตอบที่ยอมรับได้ สิ่งนี้ทำ สำหรับคนอื่น ๆ ให้สังเกตอาร์เรย์ภายในอาเรย์ข้างใน ...
เจเรมีคาร์ลสัน

3
post_typeความแตกต่างเฉพาะที่นี่เป็น มิฉะนั้นคุณไม่ต้องการmeta_queryอาร์เรย์สำหรับคู่คีย์ / ค่าแบบกำหนดเองเดี่ยว
Rutwick Gangurde

แน่นอนว่าต้องมีการสืบค้นเมตา ยกเว้นอาจเป็น "inline" กับmeta_keyและmeta_valueหรือกับอาร์เรย์ธรรมดาซึ่งอาจรวมถึงหลายเงื่อนไข
Maxime Culea

1

เทมเพลตหน้าจะถูกเก็บไว้เป็นค่าเมตาที่มีคีย์ "_wp_page_template"

ดังนั้นสิ่งที่คุณต้องใช้คือใช้คีย์นั้นในพารามิเตอร์การสืบค้นเมตา ตัวอย่าง

ดูhttp://codex.wordpress.org/Displaying_Posts_Using_a_Custom_Select_Query#Query_based_on_Custom_Field_and_Sorted_by_Value

และ http://codex.wordpress.org/Class_Reference/WP_Query#Custom_Field_Parameters


0

หากความพยายามของทุกคนส่งผลเป็นศูนย์อย่างไม่ถูกต้องอาจเป็นเพราะชื่อเทมเพลตนั้นไม่ถูกต้อง ฉันลองใช้ชื่อไฟล์ php และชื่อเทมเพลตแล้วพวกเขาใช้งานไม่ได้ จากนั้นฉันตัดสินใจตรวจสอบกล่องเลือกเทมเพลตที่เราเลือกเทมเพลตในเครื่องมือแก้ไขหน้า ฉันพบสิ่งนี้:

<option value="templates-map/component-tutorial-1.php" 
 selected="selected">Tutorial -1</option>

ฉันใช้templates-map/component-tutorial-1.phpและมันใช้งานได้


0

หากคุณมีแม่แบบภายในโฟลเดอร์อื่น:

$args = array(
    'post_type' => 'page', //it is a Page right?
    'post_status' => 'publish',   
    'meta_query' => array(
        array(
            'key' => '_wp_page_template',
            'value' => 'page-templates/template-name.php', // folder + template name as stored in the dB
        )
    )
);
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.