wordpressで投稿新着一覧をトップに表示させたい場合、
外観→カスタマイズ→ホームページ設定、で「ホームページの表示」を「最新の投稿」にすればよくて
1ページに表示する件数とかも管理画面で決められるんですが。
今回はカテゴリーで絞ったり、カスタムフィールドの値で表示順を変えたり、その下にもまた別のカテゴリーの記事一覧をいれたりしたかったので
ホームページは固定ページにして、各ループをショートコードでよみこませてたんですね。
そしたら、、、ページネーションがきかない、、、、設置はできたんですが、
次ページボタン押しても、2、とか押しても、URLは/page/2とか書いてあるのに、表示されているのは一向に1ページ目の内容。
検索すると多数のサイトに方法が書いてあるんですが、どれやってみても変わらず。。
そこで私が取った手段。
まず、固定ページのthe_contentsの中にループがあるのがいけないのでは、、ということで
page.phpをコピーしてpage-top.php(トップの固定ページのslugがtopでした、というかhome.phpでよかったですかね)を作ることに。
テンプレートの中身は、まずheaderを読み込んでからメインループが始まっています。
メインループの中にwp_queryがあるからいけないんじゃないかな、、ということで、メインループ削除!
そして、この一覧の下には固定ページのエディタの内容を入れたいので、the_content();の前に、
ページネーションさせたいループをぶちこみます。
<?php $paged = get_query_var('page', 1); //現在のページを取得 $args = array( 'paged' => $paged, 'posts_per_page' => '20', //1ページに表示する件数 'post_type' => 'post', //投稿タイプ 'category_name' => 'press', //表示するカテゴリー 'post_status' => 'publish', //公開中の記事 'meta_key' => 'post-num', //表示順を入れるカスタムフィールドスラッグ 'orderby' => 'meta_value_num post_date', //入力した表示順→公開日順に表示 'order' => 'DESC' //大きい順 ); $the_query = new WP_Query($args); if($the_query->have_posts()): ?> <?php while($the_query->have_posts()) : $the_query->the_post(); ?> <!-- ここにループさせる内容がはいります --> <?php endwhile; ?> <?php endif; ?> <?php if ($the_query->max_num_pages > 1) { //最大ページ数が1以上の場合に表示 echo paginate_links(array( 'base' => get_pagenum_link(1) . '%_%', 'format' => 'page/%#%/', //ページのURL 'current' => max(1, $paged), 'total' => $the_query->max_num_pages, 'prev_text' => '<', //前へ で表示するテキスト 'next_text' => '>', //次へ で表示するテキスト 'end_size' => 1 //最初と最後、何ページまでページネーションに表示するか )); } wp_reset_postdata(); ?>
わたしがひっかかりまくってたのは、
参考にしてたサイトがみんな、現在のページを取得するときに、
get_query_var( ‘paged’ ) ? intval( get_query_var( ‘paged’ ) ) : 1
とか
(int) get_query_var(‘paged’);
と書かれてたんですが、なぜかわたしの場合はそれではだめで、、
最終的にはwordpress codexにかかれていた、
get_query_var(‘page’, 1)
でおちついたというわけです。。これで思っていた表示にできました。
なんでだめだったんだろなーーーまだまだコーディングの長い道のりはつづく。。。
●参考サイト
関数リファレンス/get query var
【WordPress】固定ページでページャー付きの投稿一覧を表示