WordPressのプラグイン「WP-PageNavi」で、「2ページ目をクリックしても、URLだけ変わって表示される記事が1ページ目と同じまま」という場合の解決方法を解説します。
原因:サブクエリが現在のグローバルなページ番号を継承していないことにある。
URLが
…/page/2/
となっているのに中身が変わらない場合、WordPressのクエリ(記事を取得する命令)が、「現在のページ番号」を受け取っていないことがほとんどです。
特に、WP_Query を使って独自のリクエストを書いている場合は、明示的に paged 引数を与えない限り、デフォルトの 1(先頭ページ)を返し続けます。
解決方法:pagedパラメータを追加する
修正ポイントは2つだけです。
1. 現在のページ番号を取得して変数に入れる
まず、今何ページ目にいるのかを取得します。
$paged = (get_query_var('paged')) ? get_query_var('paged') : 1;クエリの引数($args)に paged を渡す
次に、取得したページ番号を WP_Query の引数に加えます。
$args = array(
'post_type' => 'post',
'posts_per_page' => 10,
'paged' => $paged, // ここを追記
);
$my_query = new WP_Query($args);まとめると、コード全体は以下のようになります。
$paged = (get_query_var('paged')) ? get_query_var('paged') : 1;
$args = [
'post_type' => 'post',
'posts_per_page' => 10,
'paged' => $paged,
];
$the_query = new WP_Query($args);これだけで、WordPressは「あ、今は2ページ目の記事を10件取ってくればいいんだな」と正しく判断できるようになります。