Erzwinge index.php have_posts () Schleife, um zu beenden, wenn keine klebrigen Beiträge gefunden wurden

Ich verwende derzeit den unten stehenden Code, um anstehende Beiträge in meiner index.php aufzulisten.

Wenn jedoch keine Posts vorhanden sind, werden die neuesten Posts geladen (bis zu der Anzahl, die in “Einstellungen> Lesen> Blog-Posts” angegeben ist, werden höchstens Posts angezeigt .)

Wie kann ich das Skript so ändern, dass es keine klebrigen Posts mehr gibt, wenn es nicht mehr existiert?

query_posts(array('post__in'=>get_option('sticky_posts'))); if (have_posts()) : while (have_posts()) : the_post(); 

Solutions Collecting From Web of "Erzwinge index.php have_posts () Schleife, um zu beenden, wenn keine klebrigen Beiträge gefunden wurden"

Das liegt daran, dass get_option ein leeres Array get_option , wenn es keine “sticky” get_option gibt und die Abfrage standardmäßig auf alles gesetzt wird.

 $sticky = get_option('sticky_posts'); if (!empty($sticky)) { $args['post__in'] = $sticky; $qry = new WP_Query(array('post__in' => $sticky)); if ($qry->have_posts()) : while ($qry->have_posts()) : $qry->the_post(); echo $post->post_title; endwhile; endif; } 

Und bitte query_posts keine query_posts .

Fragen Sie nach dem Vorhandensein von Haftnotizen, bevor Sie die database abfragen:

 $stickies = get_option('sticky_posts'); if ( $stickies ) { // fetch posts } 

Und lesen Sie bitte Wann sollten Sie WP_Query vs query_posts () vs get_posts () verwenden? 🙂

Für den Anfang, bevor wir zu dem wesentlichen Thema kommen, gibt es noch nie kaum ein Grund, query_posts zu verwenden. Es sollte wie veraltet behandelt werden – meistens sowieso.

Es wird nicht zurückgesetzt, sondern die Hauptabfrage überschrieben, nachdem diese bereits ausgeführt wurde.

Verwenden Sie stattdessen entweder die function get_posts oder eine neue Instanz der class WP_Query :

 $args = array( 'post__in' => get_option( 'sticky_posts' ), 'post_status' => 'publish' ); $stickies = new WP_Query( $args ); if ( $stickies->have_posts() ) { while ( $stickies->have_posts() ) { $stickies->the_post(); // do something } } // reset the $post global to its previous state wp_reset_postdata(); 

Wenn Sie die Hauptabfrage ändern pre_get_posts , unabhängig davon, ob “sticky posts” gefunden wurden, um nichts zurückzugeben (auf der Homepage), verwenden Sie die Aktion pre_get_posts :

 function wpse_96219_nothing_on_home( $query ) { if ( is_home() ) { $query->set( 'posts_per_page', 0 ); } } add_action( 'pre_get_posts', 'wpse_96219_nothing_on_home' );