Bitte schön:
Eine HTML-Liste mit allen Vorlagendateien, die für die aktuelle Zielseite verwendet werden, einschließlich aller Vorlagenteile aus Plugins, untergeordneten Designs und / oder übergeordneten Designs in einer Codezeile:
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>';
Möglicherweise müssen Sie überprüfen, ob Ihr Server in keinem Pfad doppelte Schrägstriche zurückgibt . Denken Sie daran, dies zu platzieren, nachdem alle Vorlagendateien tatsächlich verwendet wurden, wie in footer.php, aber bevor die Admin-Leiste gerendert wird .
Wenn der admin-bar stuff
Pfad oben template-loader.php
angezeigt wird oder eine andere Datei, ändern Sie den Dateinamen in dieser Codezeile in: den Dateinamen , von dem Sie abbrechen müssen. Häufig:class-wp-admin-bar.php
Wenn Sie dies in der Admin-Leiste benötigen, verwenden Sie die richtige Priorität (frühestens) , um sicherzustellen, dass am Ende dieser Liste keine Dateien eingegeben werden . Zum Beispiel:
add_action('admin_bar_menu', 'my_adminbar_template_monitor', -5);
Priorität -5
stellen Sie sicher, dass es zuerst geladen wird. Der Schlüssel ist, get_included_files()
im richtigen Moment anzurufen , da sonst ein Array-Popping erforderlich ist!
Um dies aufzubrechen:
Sie können nicht alle enthaltenen Vorlagendateien ohne PHP-Backtrace sammeln. Superglobals im Inneren template_include
sammeln sie nicht alle . Die andere Möglichkeit besteht darin, in jeder Vorlagendatei einen "Marker" zu platzieren. Wenn Sie jedoch zuerst mit den Dateien interagieren müssen, können Sie sich über die Zeit und die gesamte Idee freuen.
1) Wir müssen alle Dateien überprüfen, die von der aktuellen Wordpress-Anfrage verwendet wurden. Und es gibt viele! Seien Sie nicht überrascht, wenn Sie 300 Dateien verwenden, bevor auch Ihre functions.php registriert ist.
$included_files = str_replace('\\', '/', get_included_files());
Wir verwenden PHP, get_included_files (), und konvertieren Backslashes in Forward-Slashes, um den meisten Wordpress-Rückgabepfaden zu entsprechen.
2) Wir schneiden das Array, von dem aus die template-loader.php registriert ist. Danach sollten in den ausgefüllten get_included_files () nur Vorlagendateien ausgefüllt sein.
/* 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) Kürzen Sie die Ergebnisse nach unten, wir nicht den Weg bis zum Theme - Ordner oder Plugin - Ordner benötigen, als Vorlagen verwendet wird , können gemischt werden von Plug - ins, Thema oder Kinder Thema Ordner.
$replacement = $path.'wp-content/';
$output = str_replace($replacement, '', $output);
4) Konvertieren Sie abschließend vom Array in eine schöne HTML-Liste
$output = '<ul><li>'.implode('</li><li>', $output).'</li></ul>';
Eine letzte Änderung könnte in Teil3) -Ersetzung erforderlich sein , wenn Sie nicht möchten, dass die Plugins die erforderlichen Includes enthalten . Sie rufen möglicherweise zu class-files
spät auf und "fangen" während der Verarbeitung der Vorlagenausgabe ab.
Ich fand es jedoch vernünftig, sie sichtbar zu lassen, da die Idee darin besteht, zu verfolgen, was geladen wurde , auch wenn es sich in dieser Phase nicht um eine "Vorlage" handelt, die die Ausgabe wiedergibt .