J'ai un index.php
très simple:
<div id="content">
<? get_template_part('content', get_post_format()) ?>
</div>
<div id="pagination">
<? previous_posts_link() ?>
<? next_posts_link() ?>
</div>
Et mon content.php
ressemble à peu près à ceci:
<?
$paged = get_query_var('paged') ? get_query_var('paged') : 1;
query_posts([
'post_type' => ['articles', 'projects', 'tips'],
'orderby' => 'date',
'posts_per_page' => 7,
'paged' => $paged
]);
?>
<? while(have_posts()): the_post() ?>
<article class="post">
<h2><? the_title() ?></h2>
<p><? the_excerpt() ?></p>
<ul>
<? foreach($categories as $cat): ?>
<li class="category"><a href="#"><?= $cat->name ?></a></li>
<? endforeach ?>
</ul>
</article>
<? endwhile ?>
Il y a 14 articles au total, mais les "prochains" articles sont toujours redirigés vers un 404 sur /page/2
au lieu d'afficher les 7 articles restants.
Edit: Si j'utilise un WP_Query
personnalisé au lieu de query_posts
, les liens suivant et précédent ne s'afficheront même pas. https://Gist.github.com/elclanrs/4782705
J'essaie de trouver une solution à ce problème depuis hier. Je suis au courant de toutes les autres questions similaires à celle-ci, mais pour ma configuration particulière, aucune des solutions que j'ai trouvées n'a fonctionné, notamment:
posts_per_page
Je connais aussi pre_get_posts
mais j'aimerais savoir quel est le problème avec ma configuration actuelle. Des idées?
Au moment où vous atteignez le modèle, WordPress a déjà interrogé la base de données et décidé quoi afficher en fonction de ces résultats.
Vous voyez une erreur 404 car, en fonction de la requête principale par défaut, il n'y a plus de messages à afficher.
Lorsque vous appelez query_posts
dans le modèle, vous écrasez cette requête d'origine. Malgré le fait que vos résultats de requête nouveau _ contiennent plus de publications, WordPress n’a aucune connaissance de cette requête modifiée.
C'est pourquoi vous devriez ne jamais utiliser query_posts
dans le modèle . Vous avez déjà fourni la solution à votre problème, utilisez l'action pre_get_posts
pour modifier la requête principale avant cela se produit.