kann post_types in WP_Query () nicht überschreiben

Ich erstelle einen hervorgehobenen Post-Slider, der 4 Seiten oder Beiträge aus der Kategorie “Featured” enthält. Ich versuche WP_Query zu verwenden, habe aber keine Freude 🙁

Meine Slider-Abfrage lautet:

$ml_featured = new WP_Query( array( 'posts_per_page' => 4, 'post_type' => array('page', 'post'), 'category__in' => 22 ) ); if( $ml_featured->have_posts() ) { while( have_posts() ) : $ml_featured->the_post(); // looping endwhile; } else { // no posts } 

fire_PHP zeigt die WP_Query enthält:

 WP_Query( query = array( ['posts_per_page'] => 4 ['post_type'] => array( [0] => 'page' [1] => 'post' ) ['category__in'] => 22 ) query_vars = array( ['posts_per_page'] => 4 ['post_type'] => array( [0] => 'wod' [1] => 'attachment' ) ['category__in'] => array( [0] => 22 ) 

Ich verwende Genesis, aufbauend auf dem Beispiel-Kind-Thema. Um meinen benutzerdefinierten Posttyp ‘WOD’ auf der Homepage anzuzeigen, habe ich functions.php hinzugefügt:

 add_filter( 'pre_get_posts', 'ml_wods_home' ); function ml_wods_home( $query ) { if ( is_home() && false == $query->query_vars['suppress_filters'] ) $query->set( 'post_type', array( 'wod', 'attachment' ) ); return $query; } 

wie bei Justin Tadlock vorgeschlagen . Dies funktioniert gut alleine, scheint aber die Slider-Abfrage zu stören:

Bitte beachten Sie, dass die Abfrage [‘post_type’] von query_vars [‘post_type’] überschrieben wird. Außerdem läuft der Browser häufig aus, während ich herumspiele …

Ich fand, dass Michael Fields ein verwandtes Problem hatte , eine Lösung gepostet (was ich denke, dass ich es implementiere), aber es funktioniert nicht für mich, und ich verstehe es nicht.

Was vermisse ich?! TIA, Tim

Solutions Collecting From Web of "kann post_types in WP_Query () nicht überschreiben"

while( have_posts()): allem while( have_posts()): sollte while( $ml_featured->have_posts()):

Und zweitens überprüfen Sie in Ihrem pre_get_posts Callback:

 false == $query->query_vars['suppress_filters'] 

Dies liefert jedoch für jede WP_Query Abfrage und jede get_posts Abfrage, bei der ‘supress_filters’ explizit auf ‘false’ gesetzt ist, den Wert true. Wenn Sie überprüfen möchten, ob die Abfrage die Hauptabfrage ist (dh die Abfrage, die der globalen $wp_query ), können Sie $wp_query verwenden:

 $query->is_main_query(); 

( Siehe Dokumentation hier ). Dies gibt true zurück, wenn $query die Hauptabfrage und sonst false ist. Diese function wurde in 3.3 eingeführt . Vor 3.3 können Sie wahrscheinlich prüfen (ungetestet):

 global $wp_the_query; if($query === $wp_the_query){ //is main query }else{ // is not main query } 

Alternativ (aber verwenden Sie vorzugsweise die obigen Methoden), um nur die Hauptabfrage zu ändern:

  global $wp_query; $wp_query->set( 'post_type', array( 'wod', 'attachment' ) );