Bir şablon motoru kullanarak bir WordPress teması geliştiriyorum. Kodumu WP çekirdek işlevselliği ile mümkün olduğunca uyumlu olmasını istiyorum.
Önce bir bağlam
İlk sorunum WP sorgusundan başlayarak şablonu çözmenin bir yolunu bulmaktı . Bunu bir kütüphanem olan Brain \ Hiyerarşi kullanarak çözdüm .
İlgili get_template_part()
ve yükler Partials gibi diğer işlevleri olduğunu get_header()
, get_footer()
ve benzeri, bu şablon motoru kısmi işlevselliği yazma sargıya oldukça kolaydı.
Sorun
Benim sorunum şimdi yorum şablonu nasıl yüklenir.
WordPress işlevi comments_template()
, maksimum çekirdek uyumluluğu için de yapmak istediğim bir çok şey yapan ~ 200 satır işlevidir.
Ancak, en kısa sürede ben comments_template()
bir dosya require
d, bu ilki:
COMMENTS_TEMPLATE
tanımlanmışsa sabitteki dosyacomments.php
tema klasöründe, bulunursa/theme-compat/comments.php
WP de son çare yedek olarak klasör içerir
Kısacası, fonksiyonun benim için arzu edilmeyen bir PHP dosyasını yüklemesini önlemenin bir yolu yok, çünkü şablonlarımı oluşturmam ve sadece kullanmam gerekiyor require
.
Mevcut çözüm
Şu anda boş bir comments.php
dosya gönderiyorum ve 'comments_template'
WordPress'in hangi şablonu yüklemek istediğini bilmek için filtre kancasını kullanıyorum ve şablonu yüklemek için şablon motorumdan özelliği kullanıyorum.
Bunun gibi bir şey:
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 '';
}
Soru
Bu çalışır, çekirdek uyumludur, ancak ... boş bir gemi göndermeden çalışmasını sağlamanın bir yolu var comments.php
mı?
Çünkü hoşuma gitmedi.
comments_template
filtre veyaCOMMENTS_TEMPLATE
sabit kullanma girişimlerini keser . Bu çok önemli değil, ama dediğim gibi, çekirdek ile mümkün olduğunca uyumlu kalmak istedim.