Mit welchem PHP-Code kann der aktuelle Seitenname in einem WordPress-Theme abgerufen werden?
Alle Lösungen , die ich bisher gesehen habe ( the_title()
, get_page()->post_name
, get_post()
, etc.) funktionieren nicht für eine Seite , die Post Einträge enthält. Sie alle geben den Namen des neuesten Blogeintrags zurück.
Anders ausgedrückt: Angenommen, Sie haben eine in WordPress erstellte Seite mit dem Namen "Meine Nachrichten" erstellt. Diese Seite wird als "Post-Seite" festgelegt. Fügen Sie der Seite einige Beiträge hinzu. Welche API kann nun verwendet werden, um die Zeichenfolge "my-news" anstelle des Namens des letzten Beitrags abzurufen?
Ich habe die folgende Variable gefunden, die zu funktionieren scheint.
$wp_query->queried_object->post_name
Dies ist eigentlich die URL-freundliche Version des Seitennamens (Slug), nach der ich auch gesucht habe. Dies wurde mit der Standardvorlage ( Twenty Ten ) getestet . Ich bin mir wirklich nicht sicher, warum die beiden unten angegebenen Variablen auf meiner Website nicht funktionieren. Danke an keatch für den print_r()
Tipp .
Warum sind diese Informationen so tief im Inneren verborgen?
quelle
Antworten:
Die globale WordPress-Variable
$pagename
sollte für Sie verfügbar sein. Ich habe es gerade mit dem gleichen Setup versucht, das Sie angegeben haben.$pagename
wird in der Datei wp-includes / theme.php innerhalb der Funktion definiertget_page_template()
, die natürlich aufgerufen wird, bevor Ihre Seitenthemendateien analysiert werden, sodass sie jederzeit in Ihren Vorlagen für Seiten verfügbar ist.Obwohl es nicht dokumentiert zu sein scheint, wird die
$pagename
Variable nur festgelegt, wenn Sie Permalinks verwenden. Ich denke, das liegt daran, dass WordPress, wenn Sie sie nicht verwenden, den Seiten-Slug nicht benötigt und ihn daher nicht einrichtet.$pagename
wird nicht festgelegt, wenn Sie die Seite als statische Startseite verwenden.Dies ist der Code in /wp-includes/theme.php, der die Lösung verwendet, auf die Sie hingewiesen haben, wenn
$pagename
sie nicht festgelegt werden kann:$ pagename = get_query_var ('Seitenname'); if (! $ pagename && $ id> 0) {// Wenn eine statische Seite als Startseite festgelegt ist, wird $ pagename nicht festgelegt. Rufen Sie es aus dem abgefragten Objekt ab. $ Post = $ wp_query-> get_queried_object (); $ pagename = $ post-> post_name; }}
quelle
$pagename = $wp_query->queried_object->post_name;
, nur nicht vergessen , zu setzen ,global $wp_query;
bevor!Mein Ansatz, um den Slug-Namen der Seite zu erhalten:
quelle
Ok, Sie müssen den Seitentitel vor der Schleife abrufen.
Überprüfen Sie die Referenz: http://codex.wordpress.org/Function_Reference/WP_Query#Properties .
Mach a
vor der Schleife, um alle Werte des
$wp_query
Objekts zu sehen.quelle
Das hat bei mir funktioniert.
Wenn ich das richtig verstehe, möchten Sie den Seitennamen auf einer Seite mit Post-Einträgen abrufen.
quelle
Sie können den aktuellen Seitentyp, Beitrag oder benutzerdefinierten Beitragstyp mit der globalen Variablen abrufen
$post
:Hinweis: In einer Funktion oder Klasse müssen Sie angeben,
global $post;
bevor Sie versuchen, sie zu verwenden$post
.Wenn Sie Schleifen auf Ihrer Seite haben, stellen Sie sicher , dass Sie jede Schleife am Ende mit
wp_reset_postdata();
auf Set$post
zurück zum Standardelement Sein angezeigt (die Seite).Beachten Sie, dass die Variable 'post_title' auch für jede benutzerdefinierte Schleife / Abfrage verfügbar ist ... einschließlich Menüelementen und Medienanhängen ... alles in WordPress ist ein 'Post'.
quelle
Wenn Sie aus Ihrer Datei functions.php heraus auf die aktuelle Seite zugreifen möchten (also bevor die Schleife, bevor sie
$post
gefüllt wird, bevor sie$wp_query
initialisiert wird usw.), haben Sie wirklich keine andere Wahl, als auf die Servervariablen selbst und zuzugreifen Extrahieren Sie die angeforderte Seite aus der Abfragezeichenfolge.Beachten Sie, dass dies eine "dumme" Lösung ist. Es weiß zum Beispiel nicht, dass die Seite mit dem Slug "Coming-Soon" auch ist
p=6
. Und es wird davon ausgegangen, dass Ihre Permalink-Einstellungen auf eingestellt sindpagename
(was sie sowieso sein sollten!).Kann dennoch ein nützlicher kleiner Trick sein, wenn Sie ein kontrolliertes Szenario haben. Ich verwende dies in einer Situation, in der ich nicht angemeldete Besucher auf eine Seite "In Kürze" umleiten möchte. aber ich muss sicherstellen, dass ich sie nicht in die gefürchtete "Weiterleitungsschleife" wirf, also muss ich die Seite "in Kürze" von dieser Regel ausschließen:
quelle
Ich glaube, dass das Roots-Starter-Thema eine fantastische Funktion hat, um den aktuellen Seitentitel zu erhalten. Es ist sehr hackbar, deckt alle Basen ab und kann leicht mit dem
wp_title
Haken verwendet werden.quelle
Versuche dies:
quelle
Ich habe eine einfachere Lösung gefunden.
Ruft den zurückgegebenen Wert des Seitennamens von wp_title () ab. Wenn leer, drucken Sie den Namen der Startseite, andernfalls geben Sie den Wert wp_title () wieder.
Denken Sie daran, die Trennung mit dem ersten Argument zu entfernen und dann die Anzeige auf false zu setzen, um sie als Eingabe für die Variable zu verwenden. Dann stecken Sie einfach den Code zwischen Ihre Überschriften usw. Tags.
Es hat mir sehr gut gefallen und sichergestellt, dass das erste in dem Abschnitt deklariert wird, in dem Sie das extrahieren möchten
$title
. Dies kann so eingestellt werden, dass verschiedene Variablen zurückgegeben werden.quelle
Wir müssen nur die globale Variable "post" verwenden:
Dadurch wird der aktuelle Titel der Seite / des Beitrags wiedergegeben.
quelle
Verwenden:
quelle
Dies scheint am einfachsten zu bedienen zu sein:
quelle
Zeigen Sie den Titel an, bevor die Schleife beginnt:
quelle
Eine Option, wenn Sie nach der tatsächlich abgefragten Seite anstelle der Seiten-ID oder des Slugs suchen, besteht darin, die Abfrage abzufangen:
Innerhalb Ihrer Funktion haben Sie Zugriff auf das $ wp-Objekt und können entweder den Seitennamen oder den Postnamen abrufen mit:
Wenn Sie andererseits die Post-Daten wirklich benötigen, ist der erste Ort, an dem Sie sie erhalten (und in diesem Zusammenhang wohl der beste):
Schließlich ist mir klar, dass dies wahrscheinlich nicht die Frage des OP war, aber wenn Sie nach dem Namen der Admin- Seite suchen , verwenden Sie die globale
$pagenow
.quelle
Innerhalb der WordPress- Schleife :
Dies zeigt Ihnen den aktuellen Seitentitel.
Als Referenz: get_the_title ()
quelle
Hier ist meine Version:
get_query_var ('Seitenname') gab mir nur die Seitenschnecke. Das obige ersetzt also alle Bindestriche und macht den ersten Buchstaben jedes Wortes in Großbuchstaben - so kann es tatsächlich als Titel verwendet werden.
quelle
Folgendes habe ich ab 2018 verwendet:
quelle
Ich habe diese Funktion jetzt im WordPress-Codec gefunden .
abgefragt werden
Das ist ein Wrapper für
$wp_query->get_queried_object
.Dieser Beitrag hat mich in die richtige Richtung gebracht, aber es scheint, dass er dieses Update benötigt.
quelle
Dies funktioniert auch, wenn Sie sich in der Datei functions.php befinden. Dies ist nicht der beste Ansatz, da Sie das globale Array verwenden müssen, aber es funktioniert.
Zuerst müssen wir einen Filter hinzufügen. Es muss einen besseren Filter geben als template_include, aber ich kenne nicht alle. Bitte zeigen Sie mir den richtigen.
Vermeiden Sie es, die Variable direkt zu verwenden
Jetzt können Sie die Funktion
get_current_page()
in jedem anderen Teil der Datei functions.php verwenden.quelle