この実装、面倒なら代行します
WordPressに長く携わっていると、固定ページで一覧表示してページネーションまでしたい、という場面がよく出てきます。
一覧表示はともかく、ページネーションまでしようとなるとひと工夫が必要です。
そこで、例として「services」というカスタム投稿タイプの記事の一覧を固定ページに出して、なおかつページネーションまでさせる方法を紹介します。
まず、その固定ページ用の専用テンプレートを作りましょう。
たとえば固定ページのスラッグが arekore だとすると、
WordPressのルールで、page-arekore.php を用意してあげれば、デフォルトテンプレートの page.php ではなく page-arekore.php を読み込んでくれます。
page-arekore.php に以下のように記述します。
<?php $paged = (get_query_var('paged')) ? get_query_var('paged') : 1; $the_query = new WP_Query( array( 'post_status' => 'publish', 'post_type' => 'services', //カスタム投稿タイプ名 'paged' => $paged, 'posts_per_page' => 30, // 表示件数 'orderby' => 'date', 'order' => 'DESC' ) ); if ($the_query->have_posts()) : $html_top_result='<div>'; while ($the_query->have_posts()) : $the_query->the_post(); //ルーチン処理記述 endwhile; $html_top_result .= '</div>'; else : $html_top_result = '<div><p>ありません。</p></div>'; endif; echo $html_top_result; ?> <div class="pnavi"> <?php //ページリスト表示処理 global $wp_rewrite; $paginate_base = get_pagenum_link(1); if(strpos($paginate_base, '?') || ! $wp_rewrite->using_permalinks()){ $paginate_format = ''; $paginate_base = add_query_arg('paged','%#%'); }else{ $paginate_format = (substr($paginate_base,-1,1) == '/' ? '' : '/') . user_trailingslashit('page/%#%/','paged'); $paginate_base .= '%_%'; } echo paginate_links(array( 'base' => $paginate_base, 'format' => $paginate_format, 'total' => $the_query->max_num_pages, 'mid_size' => 1, 'current' => ($paged ? $paged : 1), 'prev_text' => '< 前へ', 'next_text' => '次へ >', )); ?> </div>
ポイント:
① 3行目でページ番号を取得してます。
② 5行目:クエリ関数は WP_Query を使うこと。上記のような記述では他のクエリ関数だとうまくいきません。
③ 34行目から下のページリスト表示処理の部分は割と汎用的なので、上のコードをコピペで使えます。
ただし、パーマリンク設定をいじっていたりするとうまく動かない場合があるので、
その場合は「FV Top Level Categories」というプラグインをインストールしておくと解決するかもしれません。
④ 49行目の’total’ => $the_query->max_num_pages の $the_query は取得した配列の変数名を入れてください。
ただし、実はこれをしても、トップページに設定した固定ページではページネーションができません。
トップページに設定した固定ページでページネーションをしたい方は、
「トップページに設定した固定ページでページネーションする」
をご覧ください。
また、固定ページでなく、シングルページ(記事ページ)でページネーションをしたい、という方は、
「シングルページ(記事ページ)で何か記事の一覧表示をしてさらにページネーションもするときの注意点」
をご覧ください。
現在あなたが利用されているWordPressテーマを活かしたまま、このページの事例を解決できるWordPressテーマを、子テーマとして購入できます。
この子テーマを有効化するだけで、現在お使いのデザインテーマにこの事例解決の機能が自動付与されます。
デザインが入っていないため、一般より格段に低い価格(事例の難易度により200円~1.3万円)です。
※ テーマは買い切りです
※ 自由に改変してお使いいただいて構いません
※ すでに子テーマでサイト運用されている方は、当該子テーマをマージしてください
WordPressカスタマイズ事例やウェブ制作ノウハウの新着情報、お役立ち情報を
リアルタイムにメルマガ配信!
100ウェブで手がけた制作・開発案件を一部、ご紹介。
クライアントからご相談いただいた内容とその実装におけるポイント、工期、予算について確認いただけます。
【テレワーク実施中 につきお電話転送中】
コール中1秒程度無音状態になりますがそのままお待ちください。
受付時間
平日 10:00~18:00
メールでのお問い合わせでも
1営業日以内にご連絡いたします。