wp_query für den ersten Sticky, dann zeigen Sie den Rest der Beiträge mit Ausnahme der ersten sticky

Ich habe das von @nacin gelesen und wp_query über query_posts in den Griff bekommen, die ich benutzt habe.

Was ich will ist:

  1. um dies in eine Vorlagendatei zu legen

  2. Abfrage aller Beiträge dieser Kategorie, in diesem Fall ‘3’

  3. um, wenn verfügbar, das erste Ergebnis auf der Seite anzuzeigen, den letzten klebrigen Beitrag

  4. Nach dem ersten Sticky, wenn einer gesetzt ist, zeigen Sie den Rest der Posts mit Ausnahme des Sticky an, wenn dieser gesetzt wurde

Probleme, die ich gesehen habe, sind: – Wenn ich posts_per_page = 1 auf der Sticky-Schleife, kann ich nicht posts_per_page = -1 auf den Rest der Posts-Schleife tun. Um dies zu umgehen habe ich die Nummer auf 999 gesetzt.

Ich sollte jetzt sagen, dass der Code ich arbeite . Dies ist jedoch für eine Website mit sehr hohem Datenaufkommen, und ich möchte sicherstellen, dass dies der beste Weg ist, und ich bin nicht sicher, ob ich wp_query richtig verwende, da die ursprünglichen Abfragen im Wesentlichen die gleichen sind ein anderes nur mit und ohne klebrige Pfosten.

global $wp_query; $wp_query = new WP_Query(array( 'post_type' => 'post', 'posts_per_page' => 1, 'category__in' => 3, 'post__in' => get_option( 'sticky_posts' ) )); while ($wp_query->have_posts()) : $wp_query->the_post(); $exclude_featured = $post->ID; echo the_title(); echo '
'; endwhile; echo '
'; echo '
'; global $wp_query; $args = array_merge( $wp_query->query_vars, array( 'post__in' => null, 'posts_per_page' => 999, 'ignore_sticky_posts' => 1, 'post__not_in' => array($exclude_featured) ) ); query_posts( $args ); while ($wp_query->have_posts()) : $wp_query->the_post(); if ( $exclude_featured == get_the_ID() ) continue; echo the_title(); echo '
'; endwhile;

Danke für jede Hilfe Jungs.

Solutions Collecting From Web of "wp_query für den ersten Sticky, dann zeigen Sie den Rest der Beiträge mit Ausnahme der ersten sticky"

Sie könnten wp_list_pluck();

 if ( $exclude_featured ) $args['post__not_in'] = wp_list_pluck( $exclude_featured->posts, 'ID' ); $args['posts_per_page'] = 999; query_posts( $args ); endif; while ( have_posts() ) : the_post(); ... 

Hier ist der wirklich einfache Weg, es zu tun.

 $args = array( 'posts_per_page' => -1, 'category__in' => 3, 'ignore_sticky_posts' => 0 ); $my_custom_query = new WP_Query( $args ); while ( $my_custom_query->have_posts() ) :$my_custom_query->the_post(); 
> //Your Stuff endwhile; // Reset Post Data wp_reset_postdata();
  • Keine Notwendigkeit, global $wp_query; besonders 2x.
  • Keine Notwendigkeit, br Tags zu < ?php post_class(); ... mehrmals, wenn Sie die < ?php post_class(); Verwenden Sie CSS, so erhalten Sie automatisch eine class namens .sticky !
  • Verwenden Sie einen besseren Namen für Ihre Abfrage.

Hier ist ein Update mit 2 Abfragen, um die Details, die ich verpasst habe, zu adressieren, da es etwas sicher ist.

 // **Loop 1** get the first sticky only $sticky = get_option( 'sticky_posts' ); $the_query = new WP_Query( 'p=' . $sticky[0]); while ( $the_query->have_posts() ) : $the_query->the_post(); ?> 
> // your content < ?php endwhile; wp_reset_postdata(); ?> ////////////// //**Loop 2** exclude the sticky from the Loop 1 $args = array( 'posts_per_page' => -1, 'ignore_sticky_posts' => 1, 'post__not_in' => array($sticky[0]) ); $super_query = new WP_Query($args); while ( $super_query->have_posts() ) : $super_query->the_post(); ?>
> // your content < ?php endwhile; wp_reset_postdata(); ?>

Ich sehe 2 große Probleme. a) Sie sollten eine globale Variable nicht direkt ändern & b) Sie sollten query_posts nicht verwenden. Hier ist ein überarbeitetes Beispiel

functionen.php

 add_action('pre_get_posts', 'customize_query'); function customize_query($query) { if(!$query->is_main_query() || !is_page_template('template-file-name.php')) return; $wp_query = new WP_Query(array( 'post_type' => 'post', 'posts_per_page' => 1, 'category__in' => 3, 'post__in' => get_option( 'sticky_posts' ) )); $query->set('posts_per_page', -1); $query->set('ignore_sticky_posts', 1); if(!empty($wp_query->posts)) $query->set('post__not_in', array($wp_query->posts[0]->ID)); } 

in der Vorlagendatei

 $query = new WP_Query(array( 'post_type' => 'post', 'posts_per_page' => 1, 'category__in' => 3, 'post__in' => get_option( 'sticky_posts' ) )); while ($query->have_posts()) : $query->the_post(); echo the_title(); echo '
'; endwhile; echo '
'; echo '
'; while (have_posts()) : the_post(); echo the_title(); echo '
'; endwhile;