Zeigen Sie die letzten Beiträge aus der ausgeschlossenen Kategorie an

Ich möchte Kategorie-Posts von Index- und Archivseiten ausschließen. Daher habe ich dieses Skript in functions.php :

 function exclude_category($query) { if ( $query->is_home() || $query->is_archive() ) { $query->set( 'cat', '-33799' ); } return $query; } add_filter('pre_get_posts', 'exclude_category'); 

Alles funktioniert gut bis hier, aber ich muss die neuesten Beiträge aus dieser Kategorie in einer Box auf allen Seiten anzeigen:

 $args = array ( 'category' => "33799", 'posts_per_page' => 2 ); $recentposts = get_posts( $args ); foreach ( $recentposts as $post ) : setup_postdata( $post ); if ( get_post_meta( $post->ID, "news_thumb", TRUE ) ) { $img = get_post_custom_values( "news_thumb", $post->ID ); } else { $img = 'images/no_pic.jpg'; } if ( get_post_meta( $post->ID, "news_short_content", TRUE ) ) { $content = get_post_custom_values( "news_short_content", $post->ID ); } else { $content = ''; } ?> SHOW_SOMETHING_IN_LOOP <?php endforeach; 

Wenn ich dieses Skript zu header.php hinzufüge, header.php ich die falsche Ausgabe. Ich kann verstehen, warum das passiert, weil ich die Kategorie in der Abfrage ausgeschlossen habe, aber wie kann ich das beheben?

Solutions Collecting From Web of "Zeigen Sie die letzten Beiträge aus der ausgeschlossenen Kategorie an"

Pieter Goosen triggerse das Problem mit diesem Vorschlag.

 if ( $query->is_home() || $query->is_archive() ) 

Sollte sein:

 if (!is_admin() && $query->is_main_query() && ( $query->is_home() || $query->is_archive() ) ) 

Dann erklärt, warum diese Lösung funktioniert:

is_main_query() nur true in der Hauptabfrage zurück. pre_get_posts ändert alle Queries pre_get_posts und Frontend, es gibt keine Bezeichnung zwischen Queries. Da Sie nur mit pre_get_posts und nicht mit allen anderen Abfragen auf die Hauptabfrage pre_get_posts , müssen Sie alle anderen Abfragen ausschließen, indem Sie prüfen, ob die aktuelle Abfrage die Hauptabfrage ist.