Wie finden Sie heraus, welche Vorlagenseite die aktuelle Seite enthält?

54

Wenn Sie ein WordPress-Thema aktivieren, ist es immer mühsam, herauszufinden, welche Datei geändert werden muss. Irgendeine Idee, wie man Dinge vereinfacht?

In Anbetracht der Funktionalität von get_template_part kann dies jedoch unmöglich sein. Was sagst du?

Durchschnittstyp
quelle
1
Ich inspiziere den HTML-Code und finde einen identifizierten Tag oder etwas Einzigartiges.
Naoise Golden
1
Zeigen Sie den Quellcode an und suchen Sie nach den Body-Klassen, aus denen hervorgeht, welche Vorlage verwendet wird. Gibt Ihnen auch die ID
Brad Dalton
Mögliches Duplikat von Get name der aktuellen Vorlagendatei
Burgi
@BradDalton +1. Insbesondere, wenn wir kein Plugin installieren oder keine Funktion schreiben dürfen, um das Ziel zu erreichen.
Subrata Sarkar

Antworten:

34

Haken Sie an template_include, legen Sie ein Global fest, um die vom Thema festgelegte Vorlage zu notieren, und lesen Sie diesen Wert in die Fußzeile oder Kopfzeile zurück, um zu sehen, welche Vorlage für eine bestimmte Ansicht aufgerufen wird.

Ich habe bereits in Get name of the current template file über diesen Filter-Hook gesprochen , aber nimm eine Kopie dieses Codes und kopiere sie in die functions.phpDatei deines Themas .

Öffnen Sie dann das header.phpoder des Themas footer.php(oder wo immer Sie möchten) und verwenden Sie Folgendes, um die aktuelle Vorlage auszudrucken.

<div><strong>Current template:</strong> <?php get_current_template( true ); ?></div>

Wenn Sie dies auf einer Produktionssite verwenden und diese Informationen von Benutzern fernhalten möchten, die keine Administratoren sind, fügen Sie eine kleine bedingte Logik hinzu.

<?php 
// If the current user can manage options(ie. an admin)
if( current_user_can( 'manage_options' ) ) 
    // Print the saved global 
    printf( '<div><strong>Current template:</strong> %s</div>', get_current_template() ); 
?>

Jetzt können Sie verfolgen, welche Ansichten welche Vorlage verwenden, und gleichzeitig diese Informationen von Ihren Besuchern fernhalten.

t31os
quelle
1
Wenn mit dieser Antwort etwas nicht stimmt oder wenn jemand Kommentare dazu abgeben könnte, was zur Verbesserung dieser Antwort getan werden könnte, schreiben Sie hier einen Kommentar und teilen Sie Ihre Gedanken und Ideen mit, wie Sie sie verbessern können.
28.
1
Es hat nicht funktioniert, Bruder, es heißt "Undefinierte Funktion"
Lucas Bustamante
1
@LucasB das gleiche hier, das ist der Fehler, den ich habe
Lincoln Bergeson
Dies sollte seinget_page_template
Blazemonger
40

Wenn Sie nur überprüfen möchten, welche Vorlagendatei zum Generieren der aktuellen Seite verwendet wurde, müssen Sie sich nicht mit Code beschmutzen.

Es gibt dieses praktische Plugin namens Debug Bar . Es ist ein großartiger Helfer in vielen Situationen, einschließlich Ihrer. Sie sollten es auf jeden Fall ausprobieren - für mich und viele andere ist es ein Muss für jede WP-Entwicklung.

Ich habe einen Screenshot angehängt, in den du dich verlieben könntest ...

Bildbeschreibung hier eingeben

Damit die Debug-Leiste funktioniert , müssen Sie wp_debugund wp_savequeriesoptions aktivieren . Diese Optionen sind standardmäßig deaktiviert.

Bevor Sie Änderungen vornehmen, sollten Sie einige Punkte beachten:

  • Tun Sie dies nicht in einer Produktionsumgebung, es sei denn, die Website ist nicht für viel Verkehr geeignet.
  • Wenn Sie das Debuggen abgeschlossen haben, müssen Sie sicherstellen , dass die Optionen (insbesondere die Option wp_savequeries, da sie sich auf die Leistung auswirken) der Website deaktiviert sind .

So nehmen Sie die Änderungen vor:

  1. Öffnen Sie die wp_config.phpDatei über einen FTP-Client.
  2. wp_debugOption suchen . Bearbeiten Sie es zu define( 'WP_DEBUG', true );. Wenn die Zeile nicht vorhanden ist, fügen Sie sie der Datei hinzu.
  3. Bearbeiten Sie auf ähnliche Weise die Zeile oder fügen Sie define( 'SAVEQUERIES', true );sie der Datei hinzu.
  4. Sparen. Sie können jetzt debuggen.

Weitere Infos: Codex

Michal Mau
quelle
2
@justCallMeBiru - das Debug Bar Plugin benötigt WP_DEBUG und nicht SAVEQUERIES, obwohl es von ihnen erweitert wird.
Pat J
3
Das Ausführen eines solchen Plugins, nur für eine kleine Information, erzeugt eine Menge Overhead, und deshalb habe ich es in meiner eigenen Antwort nicht vorgeschlagen. Trotzdem ziehen die Leute diese Antwort eindeutig vor, ich bin gespannt, warum.
T31OS
23

Ich benutze diese praktische Funktion, die die aktuelle Vorlage nur für Superadministratoren anzeigt:

function show_template() {
    if( is_super_admin() ){
        global $template;
        print_r($template);
    } 
}
add_action('wp_footer', 'show_template');

Ich hoffe, das hilft. :)

mächtigerPixel
quelle
2
Dies ist die goto Antwort, sollte akzeptiert werden.
Hybrid Web Dev
12

Fügen Sie den folgenden Code direkt nach der Zeile get_header in jede relevante Vorlagendatei ein:

<!-- <?php echo basename( __FILE__ ); ?> -->

In Ihrem Browser> Quelltext anzeigen, und der Name der Vorlage wird als Kommentar in Ihrem HTML-Code angezeigt, z

<!-- page.php -->
ronald
quelle
es ist zu mühsam, dies überall hinzuzufügen
Adal
4

Ich habe festgestellt, dass es am einfachsten ist, die WordPress-Funktion in das Body-Tag aufzunehmen. Es werden mehrere Klassen hinzugefügt, je nachdem, welche Seite Sie anzeigen (Startseite für die Vorderseite, Seite für Seite usw.).

Überprüfen Sie es hier: http://codex.wordpress.org/Function_Reference/body_class

Außerdem ist es hilfreich, Elemente mit CSS auf diesen Seiten auszurichten.

Das Kennenlernen der Vorlagenhierarchie (http://codex.wordpress.org/Template_Hierarchy), wie von David R erwähnt, ist ebenfalls eine gute Idee.

CookiesForDevo
quelle
4

Speziell für diesen Zweck gibt es ein weiteres Bare-Bones-Plugin. Ich neige dazu, die Debug-Leiste zu installieren, da diese anderen Funktionen nützlich aussehen, aber diese sind grundlegender und speziell für diesen Zweck: http://wordpress.org/extend/plugins/what-the-file/

Julian K
quelle
3

Eine sehr einfache Sache, die ich mache, ist das Einfügen eines HTML-Kommentars, der die Vorlagendatei identifiziert, in jede relevante Datei des Themas, zB oben in der index.php, die ich habe

<!-- index -->

und oben auf front-page.php

<!-- front -->

Aber das erfordert natürlich eine Änderung des Themas. Ich vermute, Sie könnten der footer.php-Datei oder der header.php-Datei eine benutzerdefinierte Funktion hinzufügen, die Ihnen mitteilt, welche Datei verwendet wurde. Die obige Methode und das Referenzdiagramm http://codex.wordpress.org/Template_Hierarchy sind das, was ich normalerweise verwende.


quelle
3

Es gibt ein Plugin namens Theme Check, das genau dies tut. Es zeigt den Namen der aktuell verwendeten Vorlagendatei als HTML-Kommentar an.

navjotjsingh
quelle
3

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 stuffPfad oben template-loader.phpangezeigt 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 -5stellen 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-filesspä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 .

Jonas Lundman
quelle