Ich versuche, den Slug der aktuellen WordPress-Seite außerhalb der Schleife abzurufen. Der Titel der Seite kehrt mit zurück wp_title ()
, aber wie kann ich den Slug bekommen?
<li>
<a href="/slug-of-current-page/">
<?php wp_title('', true); ?>
</a>
</li>
<?php global $post; $post_slug=$post->post_name; echo $post_slug; ?>
echo
es tun . Das wäre also ideal:<?php global $post; echo $post->post_name; ?>
$WP_Post
?Wie in den anderen Antworten angegeben, ist die Schnecke in der Unterkunft gespeichert
post_name
. Während es könnte direkt zugegriffen werden, ziehe ich die ( zu wenig genutzt)get_post_field()
Funktion Post Eigenschaften für den Zugriff auf die für sie keine richtige API haben.Es erfordert einen explizit bereitgestellten Beitrag und nicht standardmäßig den aktuellen. Für den aktuellen Beitrag wäre dies also:
quelle
get_post_field
ohne zweites Argument ( docs ) verwenden können5. APRIL 2016 BEARBEITEN
Nach mehr Zuverlässigkeit zu graben, ich tun , endete diese Antwort auf die folgende Stelle , die auf diese bearbeiten führt: ( Achten Sie darauf, check it out )
Die zuverlässigste Methode, die ich bis heute finden konnte, ist die folgende:
Auf diese Weise sind Sie zu 99,9999% sicher, dass Sie jedes Mal die richtigen Daten erhalten.
URSPRÜNGLICHE ANTWORT
Eine weitere sicherere Alternative zu diesem Problem ist mit
get_queried_object()
dem dem aktuellen abgefragten Objekt hält die Seite Slug zu erhalten , die von dem gehalten wirdpost_name
Eigentum. Dies kann überall in Ihrer Vorlage verwendet werden.$post
kann verwendet werden, aber es kann als jede benutzerdefinierte Abfrage oder benutzerdefinierten Code unzuverlässig sein kann , den Wert ändern$post
, so sollte es außerhalb der Schleife vermieden werden.Die Verwendung
get_queried_object()
des Befehls zum Abrufen des aktuellen Seitenobjekts ist wesentlich zuverlässiger und lässt sich mit geringerer Wahrscheinlichkeit ändern, es sei denn, Sie verwenden das Böse,query_posts
das das Hauptabfrageobjekt zerstört. Dann liegt dies ganz bei Ihnen.Sie können das oben genannte wie folgt verwenden
quelle
query_posts
ist nicht böse, wenn Sie die Hauptabfrage ändern möchten , die Sie jedoch in der Regel nicht und oft missbraucht wird :)Der einfache Weg, um die Schnecke zu bekommen, ist mit:
quelle
http://domain/?p=123
, die Sie verlassen?p=123
.Angesichts des Codebeispiels sieht es so aus, als ob Sie wirklich einen Link benötigen. In diesem Fall können Sie get_permalink () verwenden , das außerhalb der Schleife verwendet werden kann. Das sollte das tun, was Sie zuverlässiger benötigen als die Verwendung der Pfostenschnecke.
quelle
Könnte eine alte Frage sein, aber ich habe die Funktionen get_the_slug () und the_slug () basierend auf Ihren Antworten erstellt.
quelle
Dies ist die Funktion, die verwendet werden soll, wenn der Slug außerhalb der Schleife abgerufen werden soll.
Antwort hier gefunden: Wie man den Slug der aktuellen Seite in WordPress abruft?
quelle
Nur weiter auf @Matthew Boynes Antwort, wenn Sie daran interessiert sind, die übergeordnete Schnecke (falls vorhanden) auch zu bekommen, dann habe ich diese Funktion nützlich gefunden:
ZB um die Schnecke (n) der Körperklasse hinzuzufügen:
quelle
Wenn Sie eine umfassendere Antwort wünschen, können Sie mit der folgenden SQL-Abfrage jederzeit alle Posts abrufen, die entweder Posts, Seiten oder benutzerdefinierte Taxonomien sind, auch wenn noch keine Hooks ausgelöst wurden.
Raw SQL:
Dies funktioniert sogar in der allerersten Zeile Ihrer Funktionsdatei, sogar vor den Hooks
mu_plugins_loaded
oderinit
.@Hinweis
Dies setzt voraus, dass Sie ein Standard-Datenbankpräfix haben
wp_posts
. Wenn Sie variable Präfixe berücksichtigen müssen, können Sie die richtige Post-Tabelle ganz einfach über PHP erhalten, indem Sie die folgenden Schritte ausführen:Dann läuft entweder mit
$wpdb
,mysqli
oder einePDO
Instanz. Da diese Abfrage keine Benutzereingaben enthält, kann sie ohne eine vorbereitete Anweisung ausgeführt werden, solange Sie keine Variablen in sie einfügen.Ich würde vorschlagen, dies als privaten statischen Wert einer Klasse zu speichern, damit auf sie zugegriffen werden kann, ohne die Abfrage mehr als einmal pro Seite erneut auslösen zu müssen, um die bestmögliche Leistung zu erzielen.
Verwendungszweck
Sie bekommen das Wesentliche. Wenn Sie weitere Details benötigen, können Sie diese wie gewohnt mit abrufen
new \WP_Post( get_the_ID() );
Auf diese Weise können Sie die Posts jederzeit überprüfen, auch wenn die WordPress-Schleife nicht an einem Punkt angekommen ist, an dem Ihre Anfrage als akzeptabel erachtet wird. Dies ist eine etwas optimierte Version derselben Abfrage, die vom Wordpress-Kern selbst ausgeführt wird. Dieser filtert den gesamten Müll heraus, den Sie nicht zurückhaben möchten, und gibt Ihnen lediglich eine übersichtliche Liste mit der entsprechenden Autoren-ID, dem Post-Typ, dem Slug und der Sichtbarkeit. Wenn Sie weitere Details benötigen, können Sie diese wie
new \WP_Post($id);
gewohnt mit abrufen oder eine der anderen nativen Wordpress-Funktionen mit einer der relevanten Tabellenzeilen verwenden, auch außerhalb der Schleife.Ich verwende ein ähnliches Setup in einigen meiner eigenen benutzerdefinierten Designs und Plugins, und es funktioniert ziemlich gut. Es ist auch sicher und lässt interne Daten nicht im globalen Bereich schweben, wo sie wie die meisten Dinge in Wordpress überschrieben werden können.
quelle
Ich verstehe ehrlich gesagt nicht, warum keine der Antworten einfach so ist:
Dies funktioniert für alle Posts, Seiten und benutzerdefinierten Routen.
quelle
Dynamischer Seitenaufruf in WordPress.
quelle