カスタムフロントページのテンプレート階層

サイトのフロントページでは、
WordPressは常に存在する場合、
front-page.phpテンプレートファイルを使用します。
front-page.phpが存在しない場合、WordPressは、設定 > 表示設定 > フロントページの表示のユーザー設定に応じて、どのテンプレートファイルを使用するかを決定します。以下の通りです:

カスタムサイトフロントページテンプレート

カスタムサイトフロントページテンプレートを作成するには、テーマに次のいずれかを含めます:

カスタムブログ投稿インデックスページテンプレート

カスタムブログ投稿インデックステンプレートを作成するには、テーマに次の内容を含めます:

  • home.php

ブログ投稿インデックスには、home.phpテンプレートファイルのみを使用します。カスタムページテンプレート(例:template-blog.php)を使用しない理由は2つあります:

  • 1.* 静的フロントページ機能が正しく設定されている場合、WordPressは「投稿ページ」として指定されたページにカスタムページテンプレートが割り当てられていても、ブログ投稿インデックスを表示するためにカスタムページテンプレートを使用しません。WordPressはhome.phpまたはindex.phpのいずれかのみを使用します。
  • 2.* カスタムページテンプレートが「投稿ページ」として指定されたページ以外の静的ページに割り当てられている場合、ブログ投稿インデックスのループページネーションは正しく機能しません。

コンテキスト条件タグ

is_front_page

条件タグ is_front_page()は、サイトのフロントページが表示されているかどうかを確認します。サイトのフロントページが表示されている場合はtrueを返します。これは、‘設定 > 表示設定 -

フロントページの表示’が「最新の投稿」または「静的ページ」に設定されているかどうかに関係なく、trueを返します。

is_home

条件タグ is_home()は、ブログ投稿インデックスが表示されているかどうかを確認します。ブログ投稿インデックスが表示されている場合はtrueを返します:サイトのフロントページが表示されていて、‘設定 > 表示設定 -

フロントページの表示’が「最新の投稿」に設定されている場合、または‘設定 > 表示設定 -
フロントページの表示’が「静的ページ」に設定されていて、「投稿ページ」の値が現在表示されているページである場合。

サイトのフロントページが表示されていて、‘設定 > 表示設定 -

フロントページの表示’が「最新の投稿」に設定されている場合、両方is_front_page()is_home()はtrueを返します。

front-page.phpの設定

存在する場合、front-page.phpテンプレートファイルは、‘設定 > 表示設定 -

フロントページの表示’が「静的ページ」または「最新の投稿」に設定されているかどうかに関係なく、サイトのフロントページで使用されます。テーマは、サイトのフロントページが静的ページまたはブログ投稿インデックスのいずれかを表示できるように、両方のオプションを考慮する必要があります。これを行う方法はいくつかあります。

front-page.php内の条件付き表示

設定 > 表示設定 -

フロントページの表示’の両方のオプションを考慮するためにfront-page.phpが可能にする方法の1つは、front-page.php自体の内部に条件を追加することです。これには、
get_option( ‘show_on_front’ )

get_home_template()
、および
get_page_template()
を使用します。

方法1:カスタムコンテンツをfront-page.php内に直接含める:

  1. if ( 'posts' == get_option( 'show_on_front' ) ) {
  2. include( get_home_template() );
  3. } else {
  4. // Custom content markup goes here
  5. }

方法2:任意のページテンプレートを含める:

  1. if ( 'posts' == get_option( 'show_on_front' ) ) {
  2. include( get_home_template() );
  3. } else {
  4. include( get_page_template() );
  5. }

frontpage_templateのフィルタリング

静的ページ/カスタムコンテンツまたはブログ投稿インデックスのいずれかを表示するために、front-page.php内に条件コードを追加せずに、フィルタリングfrontpage_templateを行う別の方法は、functions.phpにフィルタコールバックを追加することです:

  1. function themeslug_filter_front_page_template( $template ) {
  2. return is_home() ? '' : $template;
  3. }
  4. add_filter( 'frontpage_template', 'themeslug_filter_front_page_template' );

この方法では、ブログ投稿インデックスが表示されているときにWordPressがfront-page.phpテンプレートファイルを完全にバイパスします。

front-page.phpへのカスタムクエリループの追加

もしfront-page.phpテンプレートファイルがデフォルトのWordPressループを含んでいる場合、次のようになります:

  1. <?php
  2. if ( have_posts() ) : while ( have_posts() ) : the_post();
  3. // do something
  4. endwhile; else:
  5. // no posts found
  6. endif;

そのループは、‘設定 > 表示設定 -

投稿ページ’に割り当てられた静的ページの投稿コンテンツに適用されます。

カスタムループ(最新のブログ投稿、カスタム/特集コンテンツなど)を表示するには、WP_Queryへの呼び出しを使用して二次ループクエリを追加します。たとえば、最新の3つのブログ投稿を表示するには:

  1. $latest_blog_posts = new WP_Query( array( 'posts_per_page' => 3 ) );
  2. if ( $latest_blog_posts->have_posts() ) : while ( $latest_blog_posts->have_posts() ) : $latest_blog_posts->the_post();
  3. // Loop output goes here
  4. endwhile; endif;

ページネーション

静的フロントページはページ分けされることを意図していません。静的フロントページでは、WordPressの前のページ/次のページリンク機能は機能しません。静的フロントページのページネーションは、pageクエリ変数を使用し、paged変数は使用しません。詳細については、WP_Queryを参照してください。