템플릿 엔진을 사용하여 WordPress 테마를 개발 중입니다. 내 코드가 WP 핵심 기능과 최대한 호환되기를 바랍니다.
어떤 맥락 먼저
첫 번째 문제는 WP 쿼리에서 시작하여 템플릿 을 해결 하는 방법을 찾는 것이 었습니다 . 내 라이브러리 인 Brain \ Hierarchy를 사용하여 그 문제를 해결했습니다 .
에 관한 get_template_part()
로드의 파셜이 좋아하는 다른 기능 것으로 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'
중이며 필터 후크를 사용하여 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
상수를 사용 하여 템플릿을 사용자 정의 하려는 시도가 중단 됩니다. 중추적 인 것은 아니지만 내가 말했듯이 가능한 한 코어와 호환되도록하고 싶었습니다.