J'ai besoin de paginer des publications personnalisées ... Je ne vois pas pourquoi, mais je reçois 404 en passant à la page suivante. Voici mon code:
$paged = (get_query_var('paged')) ? get_query_var('paged') : 1;
query_posts( array( 'post_type' => 's_stories', 'posts_per_page' => 4 , 'paged'=>$paged) );
if (have_posts()){
while (have_posts()) { the_post(); ?>
<div class="post">
<h2 class="title"><a href="<?php echo get_permalink($post->ID); ?>"><?php the_title(); ?></a></h2>
<?php the_excerpt(); ?>
</div> <!-- end post -->
<div class="clear"></div>
<?php } } ?>
<div class="paging">
<div style="float:left; font-weight:bold"><?php next_posts_link('« Previous Story') ?></div>
<div style="float:right; font-weight:bold"><?php previous_posts_link('Next Story »') ?></div>
</div>
J'ai la valeur "paginée" et la navigation dans les publications, aucune idée de ce qui se passe maintenant ...?
Merci :)
N'utilisez pas query_posts
. Ceci est un exemple classique de ce qui se passe quand vous faites :)
Fondamentalement, lorsque WordPress reçoit une URL, il la considère comme une requête - il interroge ensuite la base de données pour trouver les résultats (le cas échéant) et affiche un modèle approprié (tel que 404.php en l'absence de résultats).
Si cela arrive à atteindre votre page de modèle, il vous est ensuite demandé de supprimer cette requête et d'en démarrer une nouvelle (ce qui est une perte de temps), ce qui rompra la pagination.
Fondamentalement, la pagination ajoute la variable de requête paged
à l'URL actuelle - cette nouvelle URL (qui devrait vous mener à la page 2, par exemple) - constitue la base de la requête à recevoir page 2 - mais l'URL de la barre d'adresse n'est pas le contenu. vous êtes après (parce que vous ignorez cela et démarrez une nouvelle requête avec query_posts
. Le résultat final est qu'une requête que vous ne voulez pas vraiment est exécutée et ne renvoie aucun résultat. Le modèle 404 est donc servi et le modèle avec Votre query_posts
n'est jamais atteint.
Jetez un coup d'œil au message lié ci-dessus pour trouver des alternatives à query_post
, mais comme il s'agit de la "requête principale" (la requête basée sur l'URL reçue) que vous souhaitez utiliser pre_get_posts
.
Essaye ça...
<?php
global $paged; global $wp_query;
$temp = $wp_query; $wp_query= null; $wp_query = new WP_Query();
$wp_query->query('showposts=XX&post_type=POST_TYPE_NAME'.'&paged='.$paged);
while ($wp_query->have_posts()) : $wp_query->the_post();
?>
// do your content output here...
<?php endwhile; ?>
// do pagination here...
<?php $wp_query = null; $wp_query = $temp;?>
query_posts()
ne devrait pas être utilisé en général et surtout si vous essayez de jouer avec la pagination.
La logique de pagination et la 404 se produisent avant même que le fichier de modèle (et query_posts()
qu'il contient) ne commence à se charger.
Pour modifier la requête principale de la page, l’une des meilleures options consiste à utiliser pre_get_posts
hook.