ฉันกำลังพัฒนาธีม WordPress โดยใช้เครื่องมือเทมเพลต ฉันต้องการให้โค้ดของฉันทำงานร่วมกันได้มากที่สุดกับฟังก์ชั่น WP core
บางบริบทก่อน
ปัญหาแรกของฉันคือการหาวิธีแก้ไขแม่แบบที่เริ่มต้นจากแบบสอบถาม WP ฉันจะแก้ไขที่หนึ่งใช้ห้องสมุดของฉันสมอง \ ลำดับชั้น
เกี่ยวget_template_part()
และฟังก์ชั่นอื่น ๆ ที่โหลด partials ชอบget_header()
, get_footer()
และที่คล้ายกันก็เป็นคนน่ารักง่ายต่อการเขียนกระดาษห่อกับเครื่องยนต์แม่แบบการทำงานบางส่วน
ปัญหา
ปัญหาของฉันคือวิธีโหลดเทมเพลตความคิดเห็น
ฟังก์ชั่น WordPress comments_template()
เป็นฟังก์ชั่น~ 200 บรรทัดที่ทำสิ่งต่างๆมากมายซึ่งฉันต้องการจะทำเช่นนั้นเพื่อความเข้ากันได้ของคอร์สูงสุด
อย่างไรก็ตามทันทีที่ฉันโทรcomments_template()
ไฟล์จะเป็นrequire
d มันเป็นไฟล์แรกของ:
- ไฟล์ในค่าคงที่
COMMENTS_TEMPLATE
หากกำหนดไว้ comments.php
ในโฟลเดอร์ชุดรูปแบบหากพบ/theme-compat/comments.php
ใน WP รวมโฟลเดอร์เป็นทางเลือกสุดท้าย
ในระยะสั้นมีวิธีที่จะป้องกันไม่ให้ฟังก์ชั่นในการโหลดไฟล์ PHP ซึ่งไม่เป็นที่พึงประสงค์สำหรับฉันไม่เพราะฉันต้องทำให้แม่แบบและไม่เพียง require
แต่ใช้งานของฉัน
ทางออกปัจจุบัน
ในขณะนี้ฉันกำลังจัดส่งcomments.php
ไฟล์ว่างเปล่าและฉันใช้'comments_template'
ตัวกรองเบ็ดเพื่อทราบว่าแม่แบบ WordPress ต้องการโหลดและใช้คุณลักษณะจากเครื่องมือแม่แบบของฉันเพื่อโหลดแม่แบบ
บางสิ่งเช่นนี้
function engineCommentsTemplate($myEngine) {
$toLoad = null; // this will hold the template path
$tmplGetter = function($tmpl) use(&$toLoad) {
$toLoad = $tmpl;
return $tmpl;
};
// late priority to allow filters attached here to do their job
add_filter('comments_template', $tmplGetter, PHP_INT_MAX);
// this will load an empty comments.php file I ship in my theme
comments_template();
remove_filter('comments_template', $tmplGetter, PHP_INT_MAX);
if (is_file($toLoad) && is_readable($toLoad)) {
return $myEngine->render($toLoad);
}
return '';
}
คำถาม
ใช้งานได้เป็นหลักที่เข้ากันได้ แต่ ... มีวิธีที่จะทำให้มันทำงานโดยไม่ต้องส่งว่างเปล่าcomments.php
หรือไม่?
เพราะฉันไม่ชอบ
comments_template
ตัวกรองหรือCOMMENTS_TEMPLATE
ค่าคงที่เพื่อกำหนดแม่แบบเอง ซึ่งไม่ได้เป็นการพิจาณา แต่อย่างที่ฉันบอกว่าฉันต้องการที่จะอยู่กับแกนกลางให้มากที่สุดเท่าที่จะทำได้