Überschreiben der Schleife mit Filter oder Haken

Ich versuche, das $wp_query Objekt für eine bestimmte Kategorie zu ersetzen, ohne sich damit befassen zu müssen, eine neue Vorlage zu erstellen und dort ein neues WP_Query Objekt zu WP_Query .

Mein Ziel ist es, die für The Loop verfügbaren Daten vom Standard für diese Anfrage zu einer benutzerdefinierten Abfrage zu ändern.

 add_filter( 'pre_get_posts', 'custom_wpquery' ); function custom_wpquery( $query ){ global $wp_query; if (is_category(121)) { if ($wp_query === $query) { $query = new WP_Query('page_id=146'); $query->set('page_id', 146); } } return $query; }; 

Das scheint The Loop überhaupt nicht zu beeinflussen, was mache ich falsch?

Solutions Collecting From Web of "Überschreiben der Schleife mit Filter oder Haken"

Das scheint zu funktionieren, aber ich wäre daran interessiert, von anderen zu hören, ob es der “richtige” Weg ist, um diese Art von Override zu erreichen. Ich gehe davon aus, dass Sie eine Kategorie-Archivseite wie http://www.example.com/category/computers/ besuchen.

 // landing page = 188 // category = "computers" (#8) function custom_wpquery( $query ){ // the main query global $wp_the_query; if ( 'computers' === $query->get( 'category_name' ) ) { if ( $wp_the_query === $query) { // reset and override the active query $query->init(); $query->query( 'page_id=188' ); } } }; add_filter( 'pre_get_posts', 'custom_wpquery' ); 

Dies sollte $query->is_archive wahrscheinlich ebenfalls testen.