ฉันต้องการสืบค้นเฉพาะหน้าที่มีเทมเพลตหน้าที่มีWP_Query
หรือฟังก์ชันที่จะส่งคืนออบเจกต์โพสต์ แต่ฉันไม่พบข้อมูลใด ๆ เกี่ยวกับสิ่งนั้นใน codex ที่เป็นทางการ
ฉันต้องการสืบค้นเฉพาะหน้าที่มีเทมเพลตหน้าที่มีWP_Query
หรือฟังก์ชันที่จะส่งคืนออบเจกต์โพสต์ แต่ฉันไม่พบข้อมูลใด ๆ เกี่ยวกับสิ่งนั้นใน codex ที่เป็นทางการ
คำตอบ:
ลองนี้ ... สมมติว่าชื่อเทมเพลตคือ '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
ไม่ถูกต้อง: ตั้งแต่ WordPress 3 คุณต้องการบางสิ่งบางอย่างคล้ายกับ:
$args = array(
'post_type' => 'page',
'meta_query' => array(
array(
'key' => '_wp_page_template',
'value' => 'my_template.php'
)
)
);
post_type
ความแตกต่างเฉพาะที่นี่เป็น มิฉะนั้นคุณไม่ต้องการmeta_query
อาร์เรย์สำหรับคู่คีย์ / ค่าแบบกำหนดเองเดี่ยว
meta_key
และmeta_value
หรือกับอาร์เรย์ธรรมดาซึ่งอาจรวมถึงหลายเงื่อนไข
เทมเพลตหน้าจะถูกเก็บไว้เป็นค่าเมตาที่มีคีย์ "_wp_page_template"
ดังนั้นสิ่งที่คุณต้องใช้คือใช้คีย์นั้นในพารามิเตอร์การสืบค้นเมตา ตัวอย่าง
และ http://codex.wordpress.org/Class_Reference/WP_Query#Custom_Field_Parameters
หากความพยายามของทุกคนส่งผลเป็นศูนย์อย่างไม่ถูกต้องอาจเป็นเพราะชื่อเทมเพลตนั้นไม่ถูกต้อง ฉันลองใช้ชื่อไฟล์ php และชื่อเทมเพลตแล้วพวกเขาใช้งานไม่ได้ จากนั้นฉันตัดสินใจตรวจสอบกล่องเลือกเทมเพลตที่เราเลือกเทมเพลตในเครื่องมือแก้ไขหน้า ฉันพบสิ่งนี้:
<option value="templates-map/component-tutorial-1.php"
selected="selected">Tutorial -1</option>
ฉันใช้templates-map/component-tutorial-1.php
และมันใช้งานได้
หากคุณมีแม่แบบภายในโฟลเดอร์อื่น:
$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
)
)
);