Wie reset_postdata
funktioniert das Die Dokumente sagen:
Stellen Sie die globale Variable $ post der Hauptabfrageschleife nach einer sekundären Abfrageschleife mit new WP_Query wieder her
In der Klasse wird jedoch der "aktuelle" Beitrag der aktuellen WP_Query
Instanz als global festgelegt $post
. Wie wird der Beitrag der Hauptabfrageschleife wiederhergestellt?
Die WP_Query
Klasse .
global $wp_query
nicht ändern, aber dasglobal $post
Objekt wird überschrieben undwp_reset_postdata()
verwendet dasglobal $wp_query
, um das ursprüngliche$post
Objekt zurückzusetzen. Hoffentlich kann jemand mit mehr Kernkenntnissen hereinkommen und eine legitime Antwort einreichen.$wp_query
ändert sich nie, außer wenn Siequery_posts
oder$wp_query
als lokale Variable verwenden. Was den Rest Ihres Kommentars betrifft, sind Sie fastAntworten:
WP_Query::reset_postdata()
Setzt die globale Post-Variable ($GLOBALS['post'] === $post
) auf den aktuellen Post in der Schleife der aktuellenWP_Query
Instanz.Wenn Sie eine benutzerdefinierte Abfrage auf einer Seite ausführen,
$post
wird der letzte Beitrag in der Schleife dieser benutzerdefinierten Abfrage gespeichert. Das können Sie selbst testen, indem Sie hinzufügendirekt nach der Schleife Ihrer benutzerdefinierten Abfrage.
Gleiches gilt für die Hauptabfrage nach der Schleife,
$post
die den letzten Beitrag der Hauptabfrage und den ersten Beitrag in der Schleife vor der Schleife enthält.Hier ist ein einfacher Test zum Testen des
$post
globalen. Sie können dies zu Ihrer Funktionsdatei hinzufügen und jede Seite auf Ihrer Site ladenDies geschieht durch einen Aufruf,
wp_reset_postdata()
der den globalen$post
Beitrag in der Schleife der Hauptabfrage auf den aktuellen Beitrag zurücksetzt . Dies ist normalerweise der erste oder letzte Beitrag, je nachdem, ob Sie Ihre benutzerdefinierte Abfrage vor oder nach der Hauptabfrageschleife hinzufügen.Schauen wir uns an, wie
wp_reset_postdata()
es gehtWie Sie sehen können,
wp_reset_postdata()
ist nur ein Wrapper fürWP_Query::reset_postdata()
. Der wichtige Teil hierbei ist, dass es sich um einen Wrapper für die Objektmethode der Hauptabfrage handelt$wp_query->reset_postdata();
.Denken Sie daran, dass die Hauptabfrage auch verwendet
WP_Query
. So wird das Hauptabfrageobjekt festgelegtAlso , was
wp_reset_postdata()
tun ist, dauert es den aktuellen Eintrag in dem Hauptabfrage - Objekt und stellt die als$post
global, und das ist , wieWP_Query::reset_postdata()
Sätze$post
zum aktuellen Beitrag der Hauptabfragequelle