私はとてもシンプルなindex.php
を持っています:
<div id="content">
<? get_template_part('content', get_post_format()) ?>
</div>
<div id="pagination">
<? previous_posts_link() ?>
<? next_posts_link() ?>
</div>
そして私のcontent.php
はだいたいこんな感じになります:
<?
$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 ?>
合計14の投稿がありますが、 "次の"投稿は常に残りの7つの投稿を表示するのではなく、/page/2
上の404にリダイレクトしています。
編集:私がWP_Query
の代わりにカスタムのquery_posts
を使った場合、次と前のリンクは表示されません。 https://Gist.github.com/elclanrs/4782705
私は昨日からこの問題の解決策を見つけようとしていました。私はこれと同じような他のすべての質問を知っています、しかし私の特定の設定のために私がうまくいった解決策のどれも含んでいませんでした。
posts_per_page
と一致することを確認してください私はpre_get_posts
も知っていますが、私の現在の設定で何が問題なのか知りたいのですが。何か案は?
あなたがテンプレートにたどり着くまでに、WordPressはすでにデータベースに問い合わせをし、それらの結果に基づいて何を表示するかを決めました。
デフォルトのメインクエリに基づいて表示する投稿がこれ以上ないため、404エラーが発生しています。
テンプレートでquery_posts
を呼び出すと、元のクエリが上書きされます。あなたの new クエリの結果にもっと多くの投稿が含まれているという事実にもかかわらず、WordPressはこの修正されたクエリを認識していません。
これががテンプレートの中でquery_posts
を決して使わない理由です。あなたはすでにあなたの問題に対する解決策を提供しています、 pre_get_posts
アクションを使用してメインクエリ を の前に変更してください。