【WordPress】2ページ目に行くと記事が重複して、表示されない投稿がある(ページ送り / ページネーション)
2ページ目へページを移動すると、1ページ目の一番最後の投稿が、また2ページ目の上に表示されてしまう、ということがありました。
トータルの投稿数は合っていますが、1つの投稿だけ重複して表示されています。
記事が重複した原因
原因は、記事のソート順でした。
丁度、次のページに切り替わる投稿が同じ投稿日、投稿時間だったために起こった問題でした。
記事取得をする際のデフォルトの順序は「date(投稿日)」の「DESC(降順)」です。
明示的に指定しない場合、単に新しい投稿日が初めに表示されます。
投稿日が同じ場合のソート順
さて、明示的にソート順を指定しない場合、投稿日が全く同じ投稿はどのような順番になるでしょうか。
投稿日が一緒の場合は、次にIDを降順で取得しているようです。
その為、1ページ目で10件取得した場合、10件目にIDが古いほうが表示され、
2ページ目に10件取得した際は、上の11件目でもIDが古い方が表示されるということが起こりました。
日付が被りそうな時は、ソート順を明示的に指定する
あまり日付が同じ投稿というのは少ないかもしれませんが、そういった場合を考えて、ソート順を明示的に指定するのが良さそうです。
$args = [
"paged" => $paged,
'posts_per_page' => 10,
'orderby' => ['date' => 'DESC', 'ID' => 'ASC'],
];
「orderby」に、「date」「ID」の順番でソートするように指定します。
IDは降順である「DESC」でも問題ないと思います。たぶん。