get_queried_object()
Gibt die null
Post-Date-Archive (Seitentyp is_date()
) und die Haupt-Blog-Indexseite (Seitentyp is_home()
) zurück. Ist das beabsichtigt oder nur ein Versehen?
Ich habe einen Wrapper um get_queried_object () geschrieben, um den Titel der aktuellen Seite für die Verwendung in einem Thema zu erhalten, unabhängig davon, um welchen Seitentyp es sich handelt. Mir wurde schnell klar, dass ich anstatt zu verwenden get_query_object()
nur die wichtigen Teile von duplizieren sollte wp_title()
, aber vorher stieß ich auf ein interessantes Problem.
Es scheint , dass get_queried_object()
und seine Wurzelfunktion WP_Query->get_queried_object()
Rückkehr null
für ein paar Typen Auflistung, einschließlich der primäre Beiträge Listenausgabe von index.php (Seitentyp is_home()
) und Post - Archiven nach Datum (Seitentyp is_date()
).
Ich habe dies getestet, indem ich das folgende Snippet in eine Reihe von Vorlagendateien an verschiedenen Orten geworfen habe, immer nach get_header()
und vor the_post()
:
<pre><code><?php
$queried_object = get_queried_object();
var_dump( $queried_object );
?></code></pre>
Dies funktioniert perfekt in Kategoriearchiven, Tag-Archiven, benutzerdefinierten Taxonomiearchiven und benutzerdefinierten Post-Typ-Archiven. get_queried_object()
Gibt das Abfrageobjekt zurück, mit dem ein Seitentitel und andere nützliche Informationen extrahiert werden können.
In archive.php für Standardarchive für Post-Datumsangaben und in index.php für die normale Listenansicht der Homepage von Blog-Posts schlägt dies jedoch fehl.
Das Durchsuchen der Quelle vonWP_Query->get_queried_object()
zeigt etwas ziemlich Überraschendes: Es gibt keine Überprüfung auf Seitentyp is_home()
oder Seitentyp is_date()
, daher wird dieser Seitentyp $this->queried_object = null;
nicht aktualisiert und die Funktion kehrt zurück null
.
Meine Frage ist also, ist diese beabsichtigte Funktionalität (z. B. sollten Sie get_queried_object () auf diesen Seiten nicht verwenden), eine technische Einschränkung (gibt es kein aussagekräftiges Objekt, das auf diesen Seiten zurückgegeben werden kann) oder einfach eine Implementierungsüberwachung?
Gibt es überhaupt ein Äquivalent zum benutzerdefinierten Beitragstypobjekt, das für den integrierten Beitragstyp "Blog-Beitrag" angezeigt werden soll?
get_queried_object
.get_queried_object
ist sehr inkonsistent und gibt mehrere verschiedene Objekte zurück und kehrt manchmal zurücknull
. Während es nützlich ist, kann es frustrierend sein, es zu verwenden.Antworten:
Mit get_queried_object () werden der Begriff, der Autor, der einzelne Beitrag, der einzelne benutzerdefinierte Beitragstyp oder das abgefragte Seitenobjekt abgerufen. Ja, das ist beabsichtigt und wofür diese Funktion entwickelt wurde.
Wenn Sie sich in einem Datumsarchiv, einer Startseite oder einer Suche befinden, wird kein einzelnes Objekt abgefragt.
Bearbeiten:
Basierend auf dem ersten Kommentar unten muss das OP das Objekt post_type erhalten. Das Objekt post_type unterscheidet sich vom Objekt queried_object. Wenn Sie das Objekt post_type auf einer Archivseite abrufen müssen, können Sie es von query_vars abrufen.
quelle
get_queried_object()
benutzerdefinierten Archivseiten vom Typ Post, aber nicht von Standard-Archivseiten. Wennget_queried_object()
das Post-Typ-Objekt auf benutzerdefinierten Post-Typ-Archiv- und Indexseiten zurückgegeben wird, ist es meiner Meinung nach nur logisch, das Post-Typ-Objekt auf Standard-Post-Archiv- und Indexseiten zurückzugeben. Ich werde die Situation akzeptieren, wenn es aus historischen Gründen einfach so ist und die spezielle Behandlung der eingebauten Post-Typen der Abwärtskompatibilität dient, aber ich hätte gerne eine Erklärung.get_queried_object()
einWP_User
Objekt zurückgegeben wird, während auf termbasierten Archiven einWP_Term
Objekt zurückgegeben wird. Daher muss zuerst die Rückgabe von bereinigt werdenget_queried_object()
, um sie in einer generischen Archivvorlage zu verwenden. EinWP_Date
Objekt fehlt. da in den Standardthemen achive.php der Datumstitel verwendet wirdget_the_date()
und dieserget_post()
nur das Datum des ersten angezeigten Beitrags darstellt und logischerweise nur funktioniert, aber nicht genau die Abfrage darstellt und darauf basiert, dass alles andere wie erwartet funktioniert.