Tôi đang phát triển một chủ đề WordPress bằng cách sử dụng một công cụ mẫu. Tôi muốn mã của mình tương thích nhiều nhất có thể với chức năng lõi WP.
Một số bối cảnh đầu tiên
Vấn đề đầu tiên của tôi là tìm cách giải quyết mẫu bắt đầu từ truy vấn WP. Tôi đã giải quyết cái đó bằng thư viện của tôi, Brain \ HVELy .
Về get_template_part()
các chức năng khác tải các phần như get_header()
, get_footer()
và tương tự, thật dễ dàng để viết trình bao bọc cho chức năng một phần của công cụ mẫu.
Vấn đề
Vấn đề của tôi bây giờ là làm thế nào để tải mẫu bình luận.
Chức năng WordPress comments_template()
là một chức năng ~ 200 dòng thực hiện rất nhiều thứ, điều mà tôi muốn làm cũng như khả năng tương thích lõi tối đa.
Tuy nhiên, ngay sau khi tôi gọi comments_template()
, một tệp là require
d, đó là tệp đầu tiên của:
- các tập tin trong hằng
COMMENTS_TEMPLATE
, nếu được xác định comments.php
trong thư mục chủ đề, nếu tìm thấy/theme-compat/comments.php
trong WP bao gồm thư mục là dự phòng cuối cùng
Nói tóm lại, không có cách nào để ngăn chặn chức năng tải tệp PHP, điều mà tôi không mong muốn, bởi vì tôi cần kết xuất các mẫu của mình chứ không chỉ đơn giản là sử dụng require
.
Giải pháp tạm thời
Hiện tại, tôi đang gửi một comments.php
tệp trống và tôi đang sử dụng 'comments_template'
bộ lọc hook, để biết WordPress muốn tải mẫu nào và sử dụng tính năng từ công cụ mẫu của tôi để tải mẫu.
Một cái gì đó như thế này:
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 '';
}
Câu hỏi
Công việc này, tương thích cốt lõi, nhưng ... có cách nào để làm cho nó hoạt động mà không phải gửi một sản phẩm nào comments.php
không?
Bởi vì tôi không thích nó.
comments_template
bộ lọc hoặcCOMMENTS_TEMPLATE
hằng số để tùy chỉnh mẫu. Đó không phải là mấu chốt, nhưng, như tôi đã nói, tôi muốn ở lại càng nhiều càng tốt tương thích với cốt lõi.