2017-08-30 1 views
11

Ich versuche, den Dateinamen/Pfad der Vorlage auf der Seite 'Seite bearbeiten' im Dashboard zu erhalten.Herauszufinden, welche Wordpress Vorlage für eine Seite von Admin-Seite verwendet wird

Ähnlich wie bei wp-includes/template-loader.php (source) auf dem Front-End: herauszufinden, welche Vorlage zu rendern.

Leider Ausdrücke wie is_front_page() - die Wordpress 'template-loader.php verwendet, um herauszufinden, ob es get_front_page_template() verwenden sollte - funktionieren nicht ordnungsgemäß auf der Verwaltungsseite. Was zu erwarten ist, weil diese Ausdrücke das globale $ wp_query-Objekt und nicht die aktuelle Abfrage verwenden.

Was ich bisher versucht:

einen Beitrag Schleife in der Admin-Seite Laufen

$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; ?> 

Displays:

Startseite

Ist Titelseite: falsch

Mit get_post_meta

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

Displays:

Standard

..., die gleich für Front-page.php auf Start und page.php wäre auf einer anderen Standardseite, also hilft mir das nicht weiter.

Kurz

Was ich versuche ist front-page.php zu bekommen, wenn ich meine Seite ‚Home‘ zu bearbeiten. Oder custom-template.php, wenn ich eine Seite mit der ausgewählten benutzerdefinierten Vorlage bearbeite. Oder about-page.php, wenn ich eine Seite namens 'Über' bearbeite. Wie bekomme ich den richtigen Dateinamen oder Pfad?

+0

Ich habe eine Lösung für dieses Problem gefunden, indem ich ein Meta-Tag mit dem Template-Dateinamen auf dem Front-End und mit dem 'get_meta_tags' von php aus dem Backend, um den richtigen Dateinamen zu erhalten. Obwohl das funktioniert, frage ich mich, ob es eine elegantere Lösung gibt. Ein Kopfgeld jetzt beginnen. – kapser

+0

Wie läuft der obige Code-Versuch? Über einen Haken? – Steve

+0

Kurz gesagt: Das Meta-Tag wird mit dem 'wp_head'-Hook eingefügt. Mit einer ähnlichen Funktion zu [diesem] (https://github.com/WordPress/WordPress/blob/master/wp-includes/template-loader.php#L44) wird der korrekte Template-Pfad in das Meta-Tag geladen. Dann, mit curl oder get_meta_tags (probierte sie beide, beide arbeiteten), las ich dieses Meta-Tag aus dem Backend. Es funktioniert, aber es fühlt sich an wie eine schmutzige Lösung. – kapser

Antwort

2

Verwendung 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 wählen, nicht realpath() zu verwenden und erhalten nur den Namen der Vorlage.

+0

Dies gibt die Seitenvorlage zurück, die auf die Seite gesetzt wurde, nicht die Vorlage, die tatsächlich geladen wurde. Im Dashboard zum Beispiel, wenn ich die Homepage bearbeite, gibt es 'path/to/template/page.php' zurück, während es' path/to/template/front-page.php' lädt, weil Wordpress das bevorzugt . – kapser

+0

Diese Funktion gibt die Vorlage zurück, die der aktuellen Seite zugewiesen ist. Zeitraum. Wenn Sie "default" oder page.php erhalten, dann haben Sie keine benutzerdefinierte Vorlage im Seitenbearbeitungsbildschirm festgelegt ... ODER, es wird nicht in der db gespeichert. Wordpress lädt die Vorlage, die der Seite zugewiesen wurde, und wenn keine vorhanden ist, folgt sie den eigenen Vorgaben basierend auf der Vorlagenhierarchie. Wenn diese Funktion Ihnen nicht das gibt, was Sie sehen möchten, oder eine andere Vorlage geladen wird, anstatt die, die Ihnen diese Funktion bietet, müssen Sie Ihre Vorlagen und Deklarationen erneut prüfen. – Spartacus

+0

Genau, Wordpress folgt Template-Hierarchie. Was sich nicht in den Ergebnissen von get_page_template() widerspiegelt. Ich bekomme 'page.php', wenn ich Ihre Funktion in der Datei' front-page.php' zurückmelde. Getestet auf zwei verschiedene Themen. – kapser

3

Wenn Ihr spezifisches Problem auf der Startseite liegt, können Sie eine Kombination aus get_page_template() verwenden und die ID der bearbeiteten Seite mit get_option('page_on_front') vergleichen (siehe WordPress option reference). Es gibt auch eine Option, show_on_front, die angibt, ob die Startseite Posts oder eine statische Seite anzeigt.

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

+0

Danke, das würde ja für die Titelseite helfen. Leider würde ich alle [Vorlagenhierarchie] (https://developer.wordpress.org/themes/basics/template-hierarchy/) Fälle Randfälle betrachten, die sehr viel sind. Während ich ein Plugin schreibe, das für verschiedene Themen funktionieren sollte, kann ich nicht einfach einige der Edge Cases einbauen, die ich brauche. – kapser

+0

Yep, du könntest wahrscheinlich etwas zusammenkrabbeln, indem du nacheinander nach möglichen Vorlagendateien suchst, Kinderthemen etc. in Betracht ziehst ... das scheint, als würde es ziemlich schnell brüchig werden, dein Hack mit Curl ist wahrscheinlich der praktischere Lösung! – klumme

Verwandte Themen