我正在使用模板引擎开发WordPress主题。我希望我的代码与WP核心功能尽可能兼容。
一些上下文优先
我的第一个问题是找到一种从WP查询开始解析模板的方法。我使用我的图书馆Brain \ Herarchy解决了这个问题。
关于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
常量自定义模板的任何尝试。这不是关键,但正如我所说,我想尽可能与Core保持兼容。