मैं एक टेम्पलेट इंजन का उपयोग करके एक वर्डप्रेस थीम विकसित कर रहा हूं। मैं चाहता हूं कि मेरा कोड WP कोर कार्यक्षमता के साथ अधिक से अधिक संगत हो।
कुछ संदर्भ पहले
मेरी पहली समस्या WP क्वेरी से शुरू होने वाले टेम्पलेट को हल करने का एक तरीका खोजना था । मैंने उस एक पुस्तकालय का उपयोग करके हल किया, ब्रेन \ _ पदानुक्रम ।
के बारे में get_template_part()
और भार partials तरह अन्य कार्यों है कि get_header()
, get_footer()
और इसी तरह की है, यह टेम्पलेट इंजन आंशिक कार्यक्षमता को आवरण लिखने के लिए बहुत आसान था।
समस्या
मेरी समस्या अब यह है कि टिप्पणियों के टेम्पलेट को कैसे लोड किया जाए।
वर्डप्रेस फ़ंक्शन comments_template()
एक ~ 200 लाइनों का फ़ंक्शन है जो बहुत सारी चीजें करता है, जो मैं अधिकतम कोर संगतता के लिए भी करना चाहता हूं।
हालाँकि, जैसे ही मैं फोन करता हूँ comments_template()
, एक फाइल require
d होती है, यह पहली है:
- फ़ाइल को स्थिर में
COMMENTS_TEMPLATE
, यदि परिभाषित किया गया है comments.php
विषय फ़ोल्डर में, यदि मिला/theme-compat/comments.php
WP में अंतिम उपाय के रूप में फ़ोल्डर शामिल है
संक्षेप में, PHP फ़ाइल लोड करने के लिए फ़ंक्शन को रोकने का कोई तरीका नहीं है, जो मेरे लिए वांछनीय नहीं है, क्योंकि मुझे अपने टेम्पलेट्स को प्रस्तुत करने और बस उपयोग करने की आवश्यकता नहीं है require
।
वर्तमान समाधान
फिलहाल, मैं एक खाली comments.php
फ़ाइल शिपिंग कर रहा हूं और मैं 'comments_template'
यह जानने के लिए कि कौन सा टेम्पलेट वर्डप्रेस लोड करना चाहता है, और टेम्पलेट लोड करने के लिए मेरे टेम्पलेट इंजन से सुविधा का उपयोग करने के लिए, मैं फिल्टर हुक का उपयोग कर रहा हूं ।
कुछ इस तरह:
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
स्थिर का उपयोग करने के किसी भी प्रयास को तोड़ता है । जो कि महत्वपूर्ण नहीं है, लेकिन, जैसा कि मैंने कहा, मैं कोर के साथ जितना संभव हो उतना रहना चाहता था।