Herausfinden, welche WordPress-Vorlage für eine Seite von der Admin-Seite verwendet wird

Lesezeit: 5 Minuten

Benutzeravatar von kapoko
Kapoko

Ich versuche, den Dateinamen/Pfad der Vorlage abzurufen, die auf der Seite „Seite bearbeiten“ im Dashboard verwendet wird.

Ähnlich was wp-includes/template-loader.php (Quelle) am Frontend: Herausfinden, welche Vorlage gerendert werden soll.

Leider Ausdrücke wie is_front_page() – welche WordPress’ template-loader.php verwendet, um herauszufinden, ob es verwendet werden sollte get_front_page_template() – funktionieren auf der Admin-Seite nicht richtig. Was zu erwarten ist, da diese Ausdrücke das globale $wp_query-Objekt und nicht die aktuelle Abfrage verwenden.

Was ich bisher versucht habe:

Ausführen einer Post-Schleife innerhalb der Admin-Seite

$args = array(
    'p' => get_the_ID(),
    'post_type' => 'any'
);

$query = new \WP_Query($args);

if ( $query->have_posts() ) : while ( $query->have_posts() ) : $query->the_post(); ?>

    <?= the_title(); ?><br>
    Is front page: <?= is_front_page() ? 'true' : 'false' ?>

<?php endwhile; endif; ?>

Anzeigen:

Heim

Ist Titelseite: falsch

Verwenden von get_post_meta

<?= get_post_meta(get_the_ID(), '_wp_page_template', true); ?>

Anzeigen:

Ursprünglich

… was für front-page.php auf der Startseite und page.php auf einer anderen Standardseite gleich wäre, also hilft mir das nicht weiter.

Zusamenfassend

Was ich versuche zu bekommen ist front-page.php wenn ich meine ‘Home’-Seite bearbeite. Oder custom-template.php wenn ich eine Seite mit der ausgewählten benutzerdefinierten Vorlage bearbeite. Oder about-page.php wenn ich eine Seite mit dem Namen „Info“ bearbeite. Wie bekomme ich den richtigen Dateinamen oder Pfad?

  • Ich habe eine Lösung für dieses Problem gefunden, indem ich ein Meta-Tag hinzugefügt habe, das den Dateinamen der Vorlage am Frontend enthält, und PHPs verwendet habe get_meta_tags aus dem Backend, um den richtigen Dateinamen zu erhalten. Obwohl dies funktioniert, frage ich mich, ob es eine elegantere Lösung gibt. Starte jetzt ein Kopfgeld.

    – Kapoko

    5. September 2017 um 8:28 Uhr


  • Wie führen Sie den obigen Codeversuch aus? Über einen Haken?

    – Steve

    5. September 2017 um 14:27 Uhr

  • Kurz gesagt: Das Meta-Tag wird über die eingefügt wp_head Haken. Verwenden Sie eine ähnliche Funktion wie Dieses hier der korrekte Vorlagenpfad wird in das Meta-Tag geladen. Dann habe ich mit curl oder get_meta_tags (beide ausprobiert, beide funktionierten) dieses Meta-Tag aus dem Backend gelesen. Es funktioniert, aber es fühlt sich an wie eine schmutzige Lösung.

    – Kapoko

    5. September 2017 um 14:42 Uhr


  • Eine Woche später: Danke für die Antworten, auch wenn ich keine bessere Lösung für mein Problem gefunden habe. Ich kann immer noch nicht die ECHTE Vorlagendatei abrufen, die geladen wird, wenn ich auf der Admin-Seite bin, es sei denn, ich verwende den Curl-Trick, um die Seite auf dem im obigen Kommentar beschriebenen Front-End zu laden, das ich vorerst weiter verwenden werde .

    – Kapoko

    12. September 2017 um 12:03 Uhr

Wenn Ihr spezifisches Problem mit der Startseite zusammenhängt, können Sie eine Kombination aus verwenden get_page_template() und Vergleichen der ID der bearbeiteten Seite mit get_option('page_on_front') (sehen WordPress-Optionsreferenz). Es gibt auch eine Option, show_on_frontdie angibt, ob die Titelseite Beiträge oder eine statische Seite anzeigt.

Vielleicht hilft das? Ich weiß nicht, ob es andere Grenzfälle gibt, in denen eine andere Vorlage verwendet wird …

  • Danke, das würde in der Tat für die Titelseite helfen. Leider würde ich alle berücksichtigen Vorlagenhierarchie Fälle Grenzfälle, die eine Menge sind. Da ich ein Plugin schreibe, das für verschiedene Themen funktionieren soll, kann ich nicht einfach einige der Randfälle einbauen, die ich brauche.

    – Kapoko

    12. September 2017 um 11:51 Uhr

  • Ja, Sie könnten wahrscheinlich etwas zusammenschustern, indem Sie nacheinander auf das Vorhandensein möglicher Vorlagendateien prüfen, untergeordnete Themen usw. berücksichtigen … was so aussieht, als würde es ziemlich schnell spröde werden, Ihr Hack mit Curl ist wahrscheinlich der mehr praktische Lösung!

    – klamm

    12. September 2017 um 14:44 Uhr

Verwenden get_page_template():

<?php echo realpath(get_page_template()); ?> 

Es gibt so etwas wie /foo/bar/baz/wp-content/themes/your-theme/{page-template}.php

Sie können sich gegen eine Verwendung entscheiden realpath() und erhalten Sie einfach den Vorlagennamen.

  • Dadurch wird der Seitenvorlagensatz an die Seite zurückgegeben, nicht die tatsächlich geladene Vorlage. Zum Beispiel im Dashboard, wenn ich die Startseite bearbeite, die es zurückgibt path/to/template/page.php während es tatsächlich lädt path/to/template/front-page.phpweil WordPress dem den Vorzug gibt.

    – Kapoko

    8. September 2017 um 10:43 Uhr

  • Diese Funktion gibt die der aktuellen Seite zugewiesene Vorlage zurück. Zeitraum. Wenn Sie “default” oder page.php erhalten, haben Sie keine benutzerdefinierte Vorlage im Seitenbearbeitungsbildschirm festgelegt … ODER es wird nicht in der Datenbank gespeichert. WordPress lädt die der Seite zugewiesene Vorlage, und wenn keine vorhanden ist, folgt sie ihren eigenen Standardeinstellungen basierend auf der Vorlagenhierarchie. Wenn diese Funktion Ihnen nicht das gibt, was Sie sehen möchten, oder eine andere Vorlage geladen wird als die, die diese Funktion Ihnen gibt, müssen Sie Ihre Vorlagen und Deklarationen erneut überprüfen.

    – Spartakus

    8. September 2017 um 16:45 Uhr

  • Genau, WordPress folgt der Template-Hierarchie. Was sich nicht in den Ergebnissen von get_page_template() widerspiegelt. Ich bekomme page.php wenn ich Ihre Funktion in der Datei wiedergebe front-page.php. Getestet auf zwei verschiedenen Themen.

    – Kapoko

    12. September 2017 um 11:27 Uhr

  • Und was ist die Ausgabe von get_page_template() wenn Sie es auf einer Seite mit einer benutzerdefinierten Vorlage verwenden? Zum Beispiel arbeite ich gerade an einer Installation, die eine benutzerdefinierte Startseitenvorlage hat, und get_page_template() gibt den korrekten Dateinamen der Vorlage aus. Ich würde darauf wetten, dass, wenn Sie eine front-page.php haben und diese Funktion immer noch page.php anzeigt, dass etwas mit den Einstellungen der Startseite nicht stimmt.

    – Spartakus

    12. September 2017 um 17:09 Uhr

Die einzige Lösung, die ich gefunden habe, ist diese:

global $template;
echo basename($template); // front-page.php

Ich weiß, es ist hässlich, aber ich konnte einfach keinen Weg finden, diese globale Variable nicht zu verwenden.

  • Danke für Ihren Vorschlag! Problem ist für mich nicht mehr relevant, daher nicht getestet.

    – Kapoko

    3. Dezember 2019 um 10:59 Uhr

1399380cookie-checkHerausfinden, welche WordPress-Vorlage für eine Seite von der Admin-Seite verwendet wird

This website is using cookies to improve the user-friendliness. You agree by using the website further.

Privacy policy