Ở đây bạn đi:
Danh sách HTML có tất cả các tệp mẫu được sử dụng cho trang đích hiện tại, bao gồm tất cả các phần mẫu từ plugin, chủ đề con và / hoặc kết hợp chủ đề gốc , tất cả trong một dòng mã:
echo '<ul><li>'.implode('</li><li>', str_replace(str_replace('\\', '/', ABSPATH).'wp-content/', '', array_slice(str_replace('\\', '/', get_included_files()), (array_search(str_replace('\\', '/', ABSPATH).'wp-includes/template-loader.php', str_replace('\\', '/', get_included_files())) + 1)))).'</li></ul>';
Bạn có thể cần kiểm tra xem máy chủ của bạn không trả lại dấu gạch chéo ở bất kỳ đường dẫn nào . Hãy nhớ đặt nó sau khi tất cả các tệp mẫu thực sự được sử dụng, như trong footer.php, nhưng trước khi thanh quản trị kết xuất lại .
nếu admin-bar stuff
đường dẫn hiển thị ở trên cùng hoặc bất kỳ tệp nào khác, hãy thay đổi tên tệp template-loader.php
trong dòng mã này thành: bất kỳ tên tệp nào bạn cần ngắt. Thường:class-wp-admin-bar.php
nếu bạn cần điều này trong thanh quản trị, hãy sử dụng quyền ưu tiên (sớm nhất) để làm cho shure không có tệp nào được nhập vào cuối danh sách này. Ví dụ:
add_action('admin_bar_menu', 'my_adminbar_template_monitor', -5);
ưu tiên -5
làm cho shure nó tải đầu tiên. Điều quan trọng là gọi get_included_files()
đúng lúc, nếu không thì cần một số mảng!
Để phá vỡ điều này:
Bạn không thể thu thập tất cả các tệp mẫu được bao gồm mà không có nền tảng PHP. Superglobals bên trong template_include
sẽ không thu thập tất cả . Một cách khác là "đặt một điểm đánh dấu" vào mỗi tệp mẫu, nhưng nếu bạn cần tương tác với các tệp trước, bạn sẽ lúng túng với thời gian và toàn bộ ý tưởng.
1) Chúng tôi cần kiểm tra bên trong tất cả các tệp đã được sử dụng bởi yêu cầu Wordpress hiện tại. Và họ rất nhiều! Đừng ngạc nhiên nếu bạn đang sử dụng 300 tệp trước cả khi tệp.php của bạn được đăng ký.
$included_files = str_replace('\\', '/', get_included_files());
Chúng tôi đang sử dụng get_included_files () gốc của PHP, chuyển đổi dấu gạch chéo ngược thành dấu gạch chéo để khớp với hầu hết các đường dẫn trả về của Wordpress.
2) Chúng tôi đang cắt mảng đó từ nơi mẫu-loader.php được đăng ký. Sau đó, get_included_files () được điền chỉ nên có các tệp mẫu được điền.
/* The magic point, we need to find its position in the array */
$path = str_replace('\\', '/', ABSPATH);
$key = $path.'wp-includes/template-loader.php';
$offset = array_search($key, $included_files);
/* Get rid of the magic point itself in the new created array */
$offset = ($offset + 1);
$output = array_slice($included_files, $offset);
3) Rút ngắn kết quả, chúng tôi không cần đường dẫn cho đến khi thư mục chủ đề hoặc thư mục plugin, như các mẫu đang sử dụng, có thể được trộn lẫn từ các plugin, chủ đề hoặc thư mục chủ đề con.
$replacement = $path.'wp-content/';
$output = str_replace($replacement, '', $output);
4) Cuối cùng, chuyển đổi từ mảng sang danh sách HTML đẹp
$output = '<ul><li>'.implode('</li><li>', $output).'</li></ul>';
Một sửa đổi cuối cùng có thể cần thiết trong phần 3) thay thế , nếu bạn không muốn bao gồm các plugin. Họ có thể gọi class-files
trễ và "chặn" trong quá trình xử lý đầu ra mẫu.
Tuy nhiên, tôi thấy hợp lý khi để chúng hiển thị, vì ý tưởng là theo dõi những gì đã được tải , ngay cả khi đó không phải là "mẫu" hiển thị đầu ra trong giai đoạn này.