WordPressの初期設定では、トップページは常に最新記事が表示されます。
記事数が増えてくると、トップページには、最新記事ではなく、
記事一覧を表示して他のページも見てもらいたいと思うようになりました。
WordPressの設定から固定ページをトップページに設定して、
固定ページにPHPコードをインクルードさせるという方法があります。
最初、私はこれでやっていましたが、
そもそもWordPressのファイルを読み込む優先順位を理解できていれば、
こんなことをしなくても良いことがわかりました。
そのやり方を書いていきたいと思います。
前提として、子テーマを作成しておく方が良いです。
何故かというと、直接、親テーマにカスタマイズを行った場合、
WordPressのアップデートで親テーマもアップデートされてしまうと、
修正した内容が上書きされてしまい、同じ修正を再度しなければならなくなります。
話を戻しまして、WordPressは、ファイル名によって処理する順序があり、
子テーマに「home.php」というファイルがあると、
最新記事を表示するよりも優先的にこのファイルを処理します。
これを利用してトップページを記事一覧表示にしていきます。
1.子テーマにhome.phpファイルを作成する
子テーマフォルダ内に新規で「home.php」ファイルを作成します。
「home.php」は、親テーマの「index.php」ファイルをベースにしますので、
「index.php」ファイルをコピーして、ファイル名を変えても良いですし、
「home.php」を開いて「index.php」の中身をコピペしても、どちらでも構いません。
後で大幅に修正します。
2.home.phpのベースとするindex.phpの解説
まず、「home.php」のベースとなる「index.php」の処理について解説していきます。
ここで理解しておくと、後々自由に「home.php」を作成できカスタマイズできるようになります。
➀~⑤の処理について順に説明していきます。
①の処理
<?php
get_header(); ?>
この処理は、ヘッダー部を表示するために必要なので、「home.php」に記述します。
②の処理
<?php if ( is_home() && ! is_front_page() ) : ?>
<header class="page-header">
<h1 class="page-title"><?php single_post_title(); ?></h1>
</header>
<?php else : ?> <header class="page-header">
<h2 class="page-title"><?php _e( 'Posts', 'twentyseventeen' ); ?></h2>
</header>
<?php endif; ?>
この処理は、記事タイトルを表示する処理で、今回作成する「home.php」には記述しません。
③の処理
/* Start the Loop */
while ( have_posts() ) : the_post();
/* * Include the Post-Format-specific template for the content.
* If you want to override this in a child theme, then include a file
* called content-___.php (where ___ is the Post Format name) and that will be used instead.
*/
get_template_part( 'template-parts/post/content', get_post_format() );
endwhile;
この処理がWordPressループです。今回作成する「home.php」に記述して、
このループ内に全記事を一覧にしていく処理を書いていきます。
get_template_part()は、今回使いません。
④の処理
the_posts_pagination( array(
'prev_text' => twentyseventeen_get_svg( array( 'icon' => 'arrow-left' ) ) . '<span class="screen-reader-text">' . __( 'Previous page', 'twentyseventeen' ) . '</span>',
'next_text' => '<span class="screen-reader-text">' . __( 'Next page', 'twentyseventeen' ) . '</span>' . twentyseventeen_get_svg( array( 'icon' => 'arrow-right' ) ),
'before_page_number' => '<span class="meta-nav screen-reader-text">' . __( 'Page', 'twentyseventeen' ) . ' </span>',
) );
4の処理は、ページネーションの処理で必要なのですが、
表示を自分でカスタマイズしたいので、処理を変更します。
その詳細は、この記事を参照してください。
WordPressのモバイルでのページネーションの表示がうまくいかない件
⑤の処理
<?php get_footer();
5の処理は、フッターを表示する処理なので、「home.php」に記述します。
3.home.phpの作成
「home.php」ファイルは、子テーマフォルダ内に作成しておきます。
記事一覧する処理として、まずは記事タイトル、記事のサマリーを表示するのみにします。
「home.php」の前半部分です。
⑥の処理では、WP_Queryを使用して、1ページに表示する記事一覧の数を決めています。
引数のposts_per_pageに設定している値がその数になります。
WP_Queryの使い方は、WordPress Codexのサイトを参考にしてください。
そして、WordPressループで記事を回しながら、⑦の処理で記事タイトルとサマリーを表示していきます。
サマリー表示は、the_excerpt()を使用してます。
⑧のページネーションの処理の詳細は、この記事を参考にしてください。
WordPressのモバイルでのページネーションの表示がうまくいかない件
モバイル表示をCSS設定で自分でしています。
4.home.phpをトップページにするためのWordPress設定
WordPressの設定は、「設定」ー>「表示設定」で、
・「ホームページの表示」は、最新の投稿にチェック
・「1ページに投稿する最大投稿数」は、1件
に設定しておいてください。
5.最後に
はてなブログでは、Proにならないとできないトップページの記事一覧表示も
WordPressなら自分で作ることができ、CSSデザインも自由にできます。
今回は、記事一覧の基本構成を説明しましたが、
記事一覧の項目に記事中の画像を表示などを⑦の処理に追加することで、
自分なりにデザインすることができます。
是非トライしてみてください。
<関連・おすすめ記事>
WordPressのモバイルでのページネーションの表示方法 - 水瓶座列車
WordPressでモバイル対応のためのCSS作成方法の解説 - 水瓶座列車
レンタルサーバー上のWordPressデータをローカル環境にインポートする手順 - 水瓶座列車