WordPressデフォルトの設定ではインデックスリストには「投稿ページ」のみが表示されます。
ただこれを、「投稿ページ」と「固定ページ」を混在させてリスト表示させたいなんて時に利用すると良いカスタマイズ方法の紹介です。
僕はこういったことするのは、複雑な処理を書く必要があるのかと思っていたんですが、意外と簡単にできるようです。フォーラムにて教えていただきました。
目次
混在ページリストの作成方法
混在リストを作成するのは、とても簡単で、以下のような10行程度のコードをfunctions.phpに追記するだけです。子テーマのfunctions.phpでもOKです。
//「投稿ページ」と「固定ページ」の混在リストを作成 function post_page_all( $query ) { if ( is_admin() || ! $query->is_main_query() ) return; if ( $query->is_home() ) { $query->set( 'post_type', array( 'post', 'page' ) ); return; } } add_action( 'pre_get_posts', 'post_page_all' );
すると、以下のように混在ページリストが表示されます。(固定ページはスタイルシートでピンク色になるように設定してあります。)
ただ、ここで一つ問題になってくるのが、「固定ページ」には、カテゴリがないということです。
インデックスリストで、カテゴリなどを表示している場合は、次のようにカテゴリが表示されません。以下のようにカテゴリ表示用に、Font Awesomeのアイコンなどを置いている場合は、その部分が浮いてしまいます。
これを回避するためには、テーマのリスト表示部分が書かれているテンプレートのカテゴリ部分を、以下のように条件分岐することで回避できます。
<?php if ( get_the_category() ): //カテゴリがある場合は表示?> <!-- カテゴリのHTML --> <?php endif; ?>
すると、以下のように「投稿ページではカテゴリが表示」され「固定ページではカテゴリが非表示」になります。
まとめ
こういったことが、こんな簡単にできるとは意外でした。
僕はもっと、投稿ページと固定ページ両方のリストを取得して、時系列逆順に組み合わせて表示させてやる処理を書いてやる必要が有るのかと思っていました。
WordPressの関数(今回のはsetメソッド)には、元からこんな機能もあるんですね。
たびたび失礼します。固定ページだけでホームページを作っているのですが、固定ページだけの関連記事を表示させる方法はございますでしょうか?