it-swarm.com.de

die WordPress-Abfrage im Header wird nicht zurückgesetzt und beschädigt andere Schleifen

In einem Vorlagenteil in meinem Header habe ich den folgenden Code:

$args = array('post_type'=>'weather_today','orderby'=>'ID','order'=>'ASC','posts_per_page'=>1);
$query = new WP_Query($args);
$html;
if ($query->have_posts()){
$posts = $query->posts;
foreach($posts as $post) {
$html = $post->post_content;
}
}
wp_reset_postdata();
?>

Nach meinem Verständnis ist wp_reset_postdata das, was ich brauche, um die Abfrage gemäß dieser Antwort zurückzusetzen: wp_reset_postdata () oder wp_reset_query () nach einer benutzerdefinierten Schleife?

Ich habe auch wp_reset_query() ausprobiert, aber keines funktioniert, da meine anderen Vorlagenteile vom Header-Code betroffen sind. Als Beispiel, wenn ich meine single.php Vorlage mache und dies mache:

while ( have_posts() ) : the_post();
the_title();
endwhile; 

Ich erhalte den Titel des weather_today-Posts, nicht den Titel des single.php-Posts.

Ich habe das in meinem category.php umgangen:

$current_category_id = get_query_var('cat');
$current_category_obj = get_category($current_category_id);
$args = array('orderby'=>'ID','order'=>'DSC','posts_per_page'=>8,'cat'=>$current_category_id);
$query = new WP_Query($args);

Und dann eine Schleife durchlaufen, aber ich möchte nicht um das Problem herumgehen, dass meine Header-Abfrage nicht zurückgesetzt wird. Ich kenne keine ähnliche Lösung für single.php, und es scheint unabdingbar, einen WP Query für eine Vorlagendatei zu erstellen, die eine eigene Abfrage auslösen soll - beispielsweise, wie single.php den Beitrag aufnimmt, der für eine bestimmte URL bestimmt ist, oder wie auch immer es funktioniert intern.

Wie mache ich die Abfrage, die ich in meinem Header benötige, und kann trotzdem die anderen Themen-/Vorlagendateien wie erwartet ausführen?

2

Zwei Probleme hier.

Erstens verwenden Sie die Schleife nicht richtig. Anstelle der foreach verwende while ( $query->have_posts() ) { $query->the_post(); //etc.

Zweitens überschreiben Sie mit foreach($posts as $post) die globale Variable $ post. Wenn Sie also wirklich foreach verwenden müssen, verwenden Sie einen anderen Variablennamen!

1
Peter HvD