WordPressでフロントページのみにコンテンツを表示したい状況、あると思います。
「front-page.php」テンプレートに書くなり、is_front_page()
で条件分岐できてしまうのですが、「表示設定>フロントページの表示」項目で固定ページを設定している場合を考慮した柔軟な条件分岐がしたかったのです。
結果とても見づらい条件分岐コードになってしまいましたが、間違ってはいないハズなので以下のコードで対応することに。
フロントページのみコンテンツを表示する条件分岐
- フロントページかつ投稿一覧ページ
- フロントページかつ投稿一覧ページではない
- 2ページ目以降ではない
を掛け合わせています。
<?php if ( ( ( is_front_page() && is_home() ) || ( is_front_page() && ! is_home() ) ) && ! is_paged() ) : ?>
<!-- フロントページのみのコンテンツ -->
<?php endif; ?>
非常に見づらい条件です…。もっと良い書き方があるかもしれません。
フロントページ、投稿ページに固定ページが設定されているかを判定(おまけ)
// フロントページに固定ページが割り当てられている
<?php if ( get_option( 'page_on_front' ) ) : ?>
<?php
// フロントページに割り当てられている固定ページのID
echo get_option( 'page_on_front' );
?>
<?php endif; ?>
// 投稿ページに固定ページが割り当てられている
<?php if ( get_option( 'page_for_posts' ) ) : ?>
<?php
// 投稿ページに割り当てられている固定ページのID
echo get_option( 'page_for_posts' );
?>
<?php endif; ?>
表示設定でフロントページや投稿ページに固定ページを割り当てるとWordPressのオプションに値が設定されます。get_option()
で「page_on_front」「page_for_posts」を指定すると固定ページのIDが返ってくるので、これで判定することが可能です。設定されていなければ「0」が返ってくるので、これらを使った条件分岐も書くことが可能でしょう。