আমি একটি টেম্পলেট ইঞ্জিন ব্যবহার করে একটি ওয়ার্ডপ্রেস থিম বিকাশ করছি। আমি চাই আমার কোডটি ডাব্লুপি কোর কার্যকারিতার সাথে যথাসম্ভব সামঞ্জস্যপূর্ণ হোক।
প্রথমে কিছু প্রসঙ্গ
আমার প্রথম সমস্যাটি হ'ল ডাব্লুপি কোয়েরি থেকে শুরু করে টেমপ্লেটটি সমাধান করার উপায় খুঁজে পাওয়া। আমি আমার একটি লাইব্রেরি ব্যবহার যে এক মীমাংসিত ব্রেন \ শ্রেণীক্রম ।
get_template_part()
পার্টিয়ালগুলির মতো এবং অন্যান্য অনুরূপ লোড হওয়া সম্পর্কিত এবং অন্যান্য ক্রিয়াকলাপগুলি get_header()
, get_footer()
টেম্পলেট ইঞ্জিনের আংশিক কার্যকারিতাটিতে মোড়কের লিখন লেখা বেশ সহজ ছিল।
সমস্যাটি
আমার সমস্যা এখন মন্তব্য টেমপ্লেট কীভাবে লোড করা যায়।
ওয়ার্ডপ্রেস ফাংশন comments_template()
একটি 200 ডলার লাইনের ফাংশন যা অনেক কিছুই করে, যা আমি সর্বোচ্চ মূল সামঞ্জস্যের জন্যও করতে চাই।
তবে, আমি কল করার সাথে সাথেই comments_template()
একটি ফাইল require
ডি হয়, এটি এর মধ্যে প্রথম:
- স্থির মধ্যে ফাইল
COMMENTS_TEMPLATE
, সংজ্ঞায়িত হলে comments.php
থিম ফোল্ডারে যদি পাওয়া যায়/theme-compat/comments.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
ধ্রুবক ব্যবহারের যে কোনও প্রচেষ্টা ভঙ্গ করে । যা গুরুত্বপূর্ণ নয়, তবে যেমনটি আমি বলেছি, আমি মূলের সাথে যথাসম্ভব সামঞ্জস্যপূর্ণ থাকতে চেয়েছিলাম।