Ich verwende den folgenden Code, um Beiträge abzurufen:
<?php
$featuredPosts = new WP_Query();
$featuredPosts->query('showposts=5&cat=3');
while ($featuredPosts->have_posts()) : $featuredPosts->the_post(); ?>
<h1><a href="<?php the_permalink() ?>"><?php the_title(); ?></a></h1>
<div class="meta">
By <?php the_author() ?>
</div>
<div class="storycontent">
<?php the_excerpt(); ?>
</div>
<?php endwhile; ?>
Muss ich verwenden wp_reset_query()
? Wenn ja, wo soll ich es platzieren?
the_post()
Methode (d.$my_custom_query->the_post()
H.) Aufrufen , füllen Sie die Post-Variablen, auf die sich die Hauptabfrage bezieht, neu auf. Durch das Zurücksetzen werden diese Variablen mit den vorherigen Daten aufgefüllt, wenn Sie sie aufrufen. Nach benutzerdefinierten Abfragen empfiehlt es sich, Zurücksetzungen zu verwenden.Antworten:
Hi @janoChen:
Einfache Antwort: nein.
Es folgt der PHP-Code für die Funktion
wp_reset_query()
aus/wp-includes/query.php
WordPRess v3.0.4 sowie die nachfolgend aufgerufenen Funktionen. Sie sehen, dass es in erster Linie darum geht, globale Variablen zu ändern.Wenn Sie verwenden
new WP_Query($args)
, weisen Sie den Rückgabewert von Werten einer lokalen Variablen zu. Wenn Sie also nicht etwas so Komplexes tun, dass Sie die Antwort auf diese Frage bereits für "Nein" kennen, müssen Sie Folgendes nicht aufrufenwp_reset_query()
:-Mike
quelle
the_post()
in seinem Code verwendet, schreiben die Best Practices vor, dass er verwenden musswp_reset_postdata()
.wp_reset_query()
Anrufewp_reset_postdata()
, damit das funktioniert, obwohl die andere Sachewp_reset_query()
- das Zurücksetzen der$wp_query
globalen Variablen - nicht notwendig, aber in diesem Fall nicht schädlich ist. Die Antwort lautet also tatsächlich JAEs ist nicht für sich
WP_Query
selbst notwendig , aber es ist notwendig (oder zumindest sinnvoll), wenn Sie verwandte Funktionen / Methoden (wie z. B.the_post()
odersetup_postdata()
) verwenden, um globale Variablen mit Ihren Daten zu füllen.Grundsätzlich bedeutet das Erstellen eines neuen
WP_Query
Objekts lediglich das Abrufen von Daten. Wenn Sie es jedoch zum Ausführen einer aktiven Schleife und zum Zugreifen auf Vorlagen-Tags verwenden, ändert sich die Umgebung, und es empfiehlt sich, anschließend alles zurückzusetzen.Insgesamt - es ist keine bedeutende Leistungseinbuße, wenn Sie es aufrufen. Daher ist es einfacher, es immer aufzurufen, als zu entscheiden, ob Sie es tun oder vergessen und etwas auf mysteriöse Weise kaputt machen.
Aktualisieren
wp_reset_postdata()
Funktion scheint passender Wahl zu sein.wp_reset_query()
Setzt globale$wp_query
(welches benutzerdefinierteWP_Query
Objekt nicht beeinflusst) und$post
(welches wie oben beschrieben) Variablen zurück.wp_reset_postdata()
nur restaurieren$post
, das sollte reichen.quelle
Nein. Wenn Sie Ihr eigenes WP_Query-Objekt instanziieren, haben Sie damit zu tun, was Sie wollen. Wenn Sie jedoch an der
global $wp_query
Variablen manipulieren , wirkt sich dies im globalen Namespace auf alle Skripte aus, die diese Variable gleichzeitig verwenden. Und wenn Sie etwas tun, um die darin enthaltenen Daten zu ändern, müssen Sie sie auch zurücksetzen, nachdem Sie sie verwendet haben.quelle
Wenn Sie eine solche benutzerdefinierte Abfrage verwenden
Dann werden Sie nicht auf Probleme stoßen. Andernfalls, wenn es auf derselben Seite eine andere Schleife gibt, sind Sie verpflichtet, unerwartete Ergebnisse zu erzielen. Ich habe wp_reset_query () im obigen Code (der in meiner header.php-Datei platziert wurde) nicht verwendet. Als ich dann zu single.php kam, bekam ich meistens die Detailseiten anderer Kategorien, was frustrierend war. Später wurde mir klar, dass ich Ich habe vergessen, die Abfrage oben zurückzusetzen. Bald begann sie wie ein Zauber zu funktionieren.
quelle