WordPressのインデックスリストに「投稿ページ」と「固定ページ」を混在させるカスタマイズ方法

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メソッド)には、元からこんな機能もあるんですね。

『WordPressのインデックスリストに「投稿ページ」と「固定ページ」を混在させるカスタマイズ方法』へのコメント

  1. 名前:raopi 投稿日:2015/03/18(水) 15:11:49 ID:ec39648a9

    たびたび失礼します。固定ページだけでホームページを作っているのですが、固定ページだけの関連記事を表示させる方法はございますでしょうか?

  2. アバター画像 名前:わいひら 投稿日:2015/03/18(水) 19:40:31 ID:7641e0b27

    表示させる方法は、あると思いますが、結構長めのPHPコードを書かなければならないかもしれません。
    投稿ページは、カテゴリーや、タグなどと関連づけることができますが、固定ページは何を関連づけるかによっても変わってくると思います。