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
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' ) );