Nun, ich bin wieder hier und habe fast das gleiche Problem wie vor drei Wochen in diesem Post , aber lassen Sie mich erklären, was seitdem passiert ist:
Ich habe ursprünglich eine Schleife verwendet, um den neuesten Sticky-Post oben auf der Startseite anzuzeigen, dann eine zweite Schleife, um alle anderen Posts anzuzeigen (mit Ausnahme aller anderen Stickies). Hier ist mein Code wie er jetzt ist:
// first loop to display only my single, MOST RECENT sticky post
$sticky = get_option('sticky_posts');
$wp_query = new WP_Query(array('post__in' => $sticky, 'caller_get_posts' => 1, 'orderby' => ID, 'showposts' => 1)); ?>
<?php while (have_posts()) : the_post(); ?>
<!-- loop code -->
<?php endwhile; wp_reset_query(); ?>
// second loop to display every other post, excluding sticky posts
<?php query_posts(array('post__not_in' => get_option('sticky_posts'))); // exclude all sticky posts ?>
<?php if (have_posts()) : while (have_posts()) : the_post(); ?>
<!-- loop code -->
<?php endif; wp_reset_query(); ?>
Was hier passiert, ist perfekt ... nur für die Titelseite. Ich bekomme ganz oben meinen Nizza Single/letzten Sticky Post, gefolgt von weiteren 5 Posts. Wenn ich auf die Seiten 2, 3, 4 usw. gehe, sehe ich leider nur die gleichen 5 Beiträge, die sich unter dem klebrigen Beitrag auf der Titelseite befanden!
Ich bin ziemlich neu mit dem Konzept der Mehrfachschleifen, also könnte ich hier wirklich eine Hand gebrauchen!
Danke im Voraus :)
Ich sehe ein paar Probleme, die wahrscheinlich zu Ihrem Problem beitragen:
query_posts()
immer nur, um die primäre Schleife zu ändern.caller_get_posts
wurde zugunsten von ignore_sticky_posts
verworfen$wp_query
ist eine definierte globale Variable. Die Verwendung außerhalb des bestimmungsgemäßen Gebrauchs kann zu unbeabsichtigten Umständen führen.Zunächst müssen Sie also feststellen, welches Ihre primäre Schleife ist. Ich gehe davon aus, dass dies die zweite Schleife ist.
Als zweites müssen Sie einen eindeutigen, beschreibenden Namen für Ihre sekundäre Schleife (d. H. Ihre erste Schleife) angeben, z. B. $most_recent_sticky_post
.
Das sollte dich verlassen mit:
<?php
// Get IDs of sticky posts
$sticky = get_option('sticky_posts');
// first loop to display only my single,
// MOST RECENT sticky post
$most_recent_sticky_post = new WP_Query( array(
// Only sticky posts
'post__in' => $sticky,
// Treat them as sticky posts
'ignore_sticky_posts' => 0,
// Order by ID
'orderby' => ID,
// Get only the one most recent
'showposts' => 1
) );
while ( $most_recent_sticky_post->have_posts() ) : $most_recent_sticky_post->the_post(); ?>
<!-- loop code -->
<?php endwhile; wp_reset_query(); ?>
// second loop to display every other post,
// excluding sticky posts
<?php
query_posts( array(
// exclude all sticky posts
'post__not_in' => get_option( 'sticky_posts' )
) );
if (have_posts()) : while (have_posts()) : the_post(); ?>
<!-- loop code -->
<?php endif; wp_reset_query(); ?>
Da Sie jetzt nicht mehr auf $wp_query
herumstampfen, sollte Ihre Paginierung ordnungsgemäß funktionieren.
Okay, andere Dinge:
showposts
ist und veraltet. Verwenden Sie stattdessen post_per_page
.z.B.:
// Define custom query args
$custom_query_args = array(
// exclude all sticky posts
'post__not_in' => get_option( 'sticky_posts' )
);
// globalize $wp_query
global $wp_query;
// Merge custom args with default query args
$merged_query_args = array_merge( $wp_query->query, $custom_query_args );
// process the query
query_posts( $merged_query_args );
Ich weiß nicht, dass dies einen Unterschied machen wird, aber ich bevorzuge es, die Standardabfrage mit dieser Methode zu ändern.
query_posts()
, um sich daran zu erinnern, dass Paging verwendet werden soll. Fügen Sie 'paged' => get_query_var('paged')
zu Ihrem $custom_query_args
-Array hinzu:z.B.
// Define custom query args
$custom_query_args = array(
// exclude all sticky posts
'post__not_in' => get_option( 'sticky_posts' ),
// don't forget to paginate!
'paged' => get_query_var('paged')
);
Wo bringt uns das hin?
Sollten Sie keine Paging-Parameter in Ihrer WP_Query verwenden?
$posts = new WP_Query( array( /*your args here*/, 'paged' => get_query_var( 'page' ) ) );
Es könnte get_query_var ('paged') sein, abhängig von der WP Version, die ich glaube.