Eh bien, je suis encore ici avec à peu près le même problème que dans ce post il y a trois semaines , mais laissez-moi vous expliquer ce qui s'est passé depuis:
À l'origine, j'utilisais une boucle pour afficher le dernier post-poster en haut de la page de couverture, puis une seconde boucle pour afficher tous les autres posts (à l'exception de tous les autres post-it). Voici mon code tel qu'il se présente maintenant:
// 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(); ?>
Ce qui se passe ici est parfait ... pour la première page uniquement. Je reçois mon message collant le plus récent et le plus récent au sommet, suivi de 5 autres messages. Malheureusement, si je feuilletais les pages 2, 3, 4, etc., tout ce que je vois sont les mêmes 5 messages qui étaient sous le post collant en première page!
Je suis assez nouveau avec le concept de boucles multiples, donc je pourrais vraiment utiliser un coup de main ici!
Merci d'avance :)
Je vois quelques problèmes qui contribuent probablement à votre problème:
query_posts()
pour modifier la boucle principale.caller_get_posts
est obsolète , en faveur de ignore_sticky_posts
$wp_query
est une variable globale définie. Son utilisation en dehors de l'utilisation prévue peut entraîner des circonstances inattendues.Donc, vous devez d’abord déterminer quelle est votre boucle principale. Je vais supposer que ceci est la secondeboucle.
Deuxièmement, créez un nom descriptif unique pour votre boucle secondaire (c'est-à-dire votre firstloop), tel que $most_recent_sticky_post
.
Cela devrait vous laisser avec:
<?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(); ?>
Maintenant, puisque vous ne piétinez plus sur $wp_query
, votre pagination devrait fonctionner correctement.
Ok, d'autres choses:
showposts
est également obsolète. Utilisez post_per_page
à la place.par exemple.:
// 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 );
Je ne sais pas si cela fera une différence, mais je préfère modifier la requête par défaut à l'aide de cette méthode.
query_posts()
à se rappeler qu'il est censé utiliser la pagination. Ajoutez 'paged' => get_query_var('paged')
à votre tableau $custom_query_args
:par exemple.
// 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')
);
Où cela nous mène-t-il?
Ne devriez-vous pas utiliser des paramètres de pagination dans votre WP_Query
$posts = new WP_Query( array( /*your args here*/, 'paged' => get_query_var( 'page' ) ) );
Cela pourrait être get_query_var ('paged') en fonction de WP version, je crois.