Я розробляю тему WordPress за допомогою двигуна шаблонів. Я хочу, щоб мій код був максимально сумісним з функціоналом WP core.
Перший контекст
Першою моєю проблемою було знайти спосіб вирішити шаблон, починаючи з WP-запиту. Я вирішив це, використовуючи мою бібліотеку, Мозок \ Ієрархія .
Що стосується get_template_part()
і інших функцій , які завантажують обертонам подобаються 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
константу для налаштування шаблону. Що не головне, але, як я вже сказав, я хотів залишитися максимально сумісним з ядром.