WordPressで全てのカテゴリーの全記事を一覧表示させるページを作る
WordPressは決められたテンプレートファイルを使うとカテゴリーごとの記事一覧や月別のアーカイブを作ることができるのでとても便利です。
ただ、全てのカテゴリーを横断した全記事一覧のページを作ろうとすると、archive.phpやcategory.phpではうまくいかないんですよね…。
意外に必要なページだと思うんですけど、どうなんでしょう…。WordPressでそういうテンプレート作ってくれないかなー。
色々と調べると全記事の一覧を作るには、固定ページで作ると良いらしいのでまとめておきます。
まずはテーマフォルダに適当なphpファイルを用意して次のようなphpを書きます。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 | <?php /** * Template Name: テンプレート名 */ ?> <?php $paged = (int) get_query_var('paged'); $args = array( 'posts_per_page' => 3, 'paged' => $paged, 'orderby' => 'post_date', 'order' => 'DESC', 'post_type' => 'post', 'post_status' => 'publish' ); $the_query = new WP_Query($args); if ( $the_query->have_posts() ) : while ( $the_query->have_posts() ) : $the_query->the_post(); ?> <div class="post"> <h1 class="title"><?php the_title(); ?></h1> <?php the_content(); ?> </div> <?php endwhile; endif; ?> <?php if ($the_query->max_num_pages > 1) { echo paginate_links(array( 'base' => get_pagenum_link(1) . '%_%', 'format' => 'page/%#%/', 'current' => max(1, $paged), 'total' => $the_query->max_num_pages )); } ?> <?php wp_reset_postdata(); ?> |
これで全てのカテゴリーをまたがった、記事一覧を表示させることができます。ページ下部にはページネーションも設置されます。
もう少し詳しくコードの内容を見ていきましょう。
まずはテンプレートを宣言する
はじめに次のようなコードを書いて「このphpファイルはカスタムテンプレートですよ。」ということをWordPressに宣言してあげます。
1 2 3 4 | <?php /** * Template Name: テンプレート名 */ ?> |
するとWordPressの固定ページ作成・更新画面から、このphpファイルをテンプレートとして使用することができるようになります。
適当な固定ページを作ってカスタムテンプレートを読み込みましょう。
ループのクエリを設定し、記事表示のHTMLを書く
次は記事を取得するためのループの記述をします。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 | <?php $paged = (int) get_query_var('paged'); $args = array( 'posts_per_page' => 3, 'paged' => $paged, 'orderby' => 'post_date', 'order' => 'DESC', 'post_type' => 'post', 'post_status' => 'publish' ); $the_query = new WP_Query($args); if ( $the_query->have_posts() ) : while ( $the_query->have_posts() ) : $the_query->the_post(); ?> <div class="post"> <h1 class="title"><?php the_title(); ?></h1> <?php the_content(); ?> </div> <?php endwhile; endif; ?> |
WordPressでのホームページ制作に慣れている方ならおなじみのループですが、今回は固定ページに記事一覧を表示させるのでページ送りのためのパラメータを設定したりしています。
「カスタム投稿タイプ内の全記事を取得」ということをやりたい場合には、‘post_type’ => ‘post’のところを適当に書き換えてください。
ループを開始させるPHPを書いたら、その後に記事を表示させるためのHTMLを記述します。さらにループを閉じるPHPを書きましょう。
ここまでで全カテゴリーにまたがった記事の一覧が表示出来ていると思います。
ページネーションを設置する
1ページずつ適当な件数を表示させてページ送りをしたい場合はページネーションを作りましょう。
1 2 3 4 5 6 7 8 9 10 | <?php if ($the_query->max_num_pages > 1) { echo paginate_links(array( 'base' => get_pagenum_link(1) . '%_%', 'format' => 'page/%#%/', 'current' => max(1, $paged), 'total' => $the_query->max_num_pages )); } ?> |
このコードで好きな箇所にページネーションを設置できます。よく動作を確認してください。
ループのクエリをリセットする
最後に今回使用したループのクエリをリセットして完了です。
1 | <?php wp_reset_postdata(); ?> |
これで全カテゴリー横断の記事一覧を表示させるページが出来ました。
カスタム投稿タイプの全記事表示などもぜひ試してみてください。
参考ページ
今回は主に下記のページのソースコードを使わせていただいています。ありがとうございます!
[WordPress] どうしても固定ページテンプレートでページ送り付きのアーカイブが作りたいのよと言う場合
「全記事一覧」を固定ページのカスタムテンプレートで作る [WordPressテーマ作成の手順17]
ホームページ制作だけでなくSNSの運用、リスティング広告やFacebook広告の運用サポートも行っています。