ページの種類で分岐処理する
目次
1. ページの種類について
ページの種類とは?
この質問に答えるのは、ちょっと難しいことです。なぜなら、
“ページの種類”という分類を作って、次のような動作をさせると、WordPressユーザーにメリットがあるよ
という類いのものだからです。
#1 WordPressのページの種類で、表示する記事を決める
ページの種類に応じて表示する内容が決まります。例えば「カテゴリページ」にアクセスすると、WP側がそのカテゴリに属する記事をピックアップしてくるし、「作成者ページ」にアクセスすると、その作成者による記事のみを表示してくれます。
「ページの種類」という概念が無かったら、自分で表示する記事を選ばないといけないので、大変ですよね。
#2 WordPressのページの種類で、記事の表示方法を変える
WordPressには条件分岐タグと言われる関数が用意されており、簡単にページの種類を見分けることが出来ます。これによって、「トップページ」「カテゴリページ」「投稿ページ」などのページの種類に応じて、サイト表示の方法を変えることができます。『トップページと個別の投稿ページでレイアウトを変えたい』という場面は多いと思いますが、これに簡単に対応できます。
補足:テンプレート階層も、ページの種類によるメリットの1つ
この記事を見てくださっている方の多くは、既にhome.phpやsingle.php、category.phpなどのテンプレートを触った事があると思います。WordPressには、ページの種類に応じて決まった名前のテンプレートを自動的に呼び出す仕組みがあり、サイト構築上のメリットになっています。
リンクを解析して、WordPressのページの種類を判断する
WordPressは、サイトにアクセスされたURLに基づいてページの種類を判断しています。このサイトを例にすると、
http://wordpress.hitsuji.me/
ダッシュボードに設定されたサイトURLと一致するから、フロントページ(トップページ)だ!
http://wordpress.hitsuji.me/category/lessons/
サイトURL/category/lessons/の構成で、lessonsは「WordPressテーマカスタマイズレッスン」のカテゴリ名(slug)と一致するから、カテゴリページだ!
http://wordpress.hitsuji.me/add-custom-background/
投稿の「カスタム背景を設置する」の記事名(slug)と一致するから、投稿ページだ!
というように、リクエストURLからページの種類を判別しています。
補足:
正確に言えば事実は逆です。予めWordPressがページの種類に応じたリンクの生成ルールを決めています。記事やカテゴリ、メディアを追加するたびに、このリンクの生成ルールに基づいたURLが発行されます。
サイトにアクセスされたときは、このリンクの生成ルールを逆に使って、ページの種類を判別しています。
2. ページの種類リスト
主なページの種類と、それに対応した条件分岐タグ、リンクの生成ルールを一覧にしました。
補足1:パーマリンクを投稿名にした前提です
補足2:リンクの{}内はslugが入ります
ページの種類 | Linkの形式 | ||
---|---|---|---|
Type | Sub-type | ||
フロントページ is_front_page() |
最新の投稿 is_home() |
⁄ | |
固定ページ is_page() |
⁄ | ||
ブログ投稿インデックス !is_front_page() && is_home() |
/{インデックス用記事名}/ | ||
個別ページ is_singular() |
投稿ページ is_single() |
投稿(post) is_singular(‘post’) |
/{記事名}/ |
カスタム投稿 is_singular(‘{投稿タイプ名}’) |
/{投稿タイプ名}/{記事名}/ | ||
添付ファイル投稿 is_attachment() |
/{記事名}/{メディア名}/ または /?attachment_id={ID番号} |
||
固定ページ is_page() |
/{記事名}/ | ||
アーカイブ is_archive() |
タクソノミー is_tax() ※タクソノミータイプ名を引数にとれる |
/{タクソノミータイプ名}/{タクソノミ名}/ | |
カテゴリ is_category() |
/category/{カテゴリ名}/ | ||
タグ is_tag() |
/tag/{タグ名}/ | ||
作成者 is_author() |
/author/{作成者名}/ | ||
日付 is_date() |
年別 is_year() |
/yyyy/ | |
月別 is_month() |
/yyyy/mm/ | ||
日別 is_day() |
/yyyy/mm/dd/ | ||
カスタム投稿 is_post_type_archive() ※投稿タイプ名を引数にとれる |
/{投稿タイプ名}/ | ||
404ページ is_404() |
|||
検索結果ページ is_search() |
/s=?{keyword} | ||
コメントポップアップページ is_comments_popup() |
このように、ページの種類は概ね階層的に定義されています。
ただし、一部の種類は横断的に定義されています(例:固定ページは、フロントページにも個別ページにも存在する)。条件分岐タグを使うときに、注意する必要があります。
ブログ投稿インデックスページとは?
フロントページ(トップページ)に固定ページを指定した場合に作成できる、投稿ページ(post)のアーカイブページのことです。詳しくは、こちらに記事を書きました。
3. 条件分岐タグで分岐処理させる
条件分岐タグを使って、 ページの種類を表示するという簡単なコードを書いてみます。青字が条件分岐タグです。
なお、前回の記事(カスタム投稿タイプを作成する)で紹介した、カスタム投稿&タクソノミーを使用しているとします。
show-pagetype.php
// 条件分岐タグ $page_type = ''; if ( is_front_page() ) { $page_type .= 'フロントページです'; if (is_home()) { $page_type .= ' 最新の投稿です'; } elseif (is_page()) { $page_type .= ' 固定ページです'; } else { // 存在しないはず。 } } elseif (!is_front_page() && is_home()) { $page_type .= ' ブログインデックスページ'; } elseif( is_singular() ) { $page_type .= '個別ページです'; if (is_single()) { $page_type .= ' 投稿ページです'; if (is_singular('post')) { $page_type .= ' 通常の投稿ページです'; } elseif (is_attachment()) { $page_type .= ' 添付ファイル投稿です'; } elseif (is_singular('websites')) { $page_type .= ' カスタム投稿"websites"のページです'; } else { $page_type .= ' その他のカスタム投稿ページです'; } } elseif (is_page()) { $page_type .= ' 固定ページです'; } else { $page_type .= ' その他の個別ページです'; } } elseif( is_archive() ) { $page_type .= 'アーカイブページです'; if ( is_tax() ) { $page_type .= ' タクソノミーアーカイブです'; if ( is_tax('websites_category') ) { $page_type .= ' タクソノミー"Webカテゴリ"アーカイブです'; } elseif ( is_tax('websites_tag') ) { $page_type .= ' タクソノミー"Webタグ"アーカイブです'; } else { $page_type .= ' その他のタクソノミーアーカイブです'; } } elseif ( is_category() ) { $page_type .= ' カテゴリアーカイブです'; } elseif ( is_tag() ) { $page_type .= ' タグアーカイブです'; } elseif ( is_author() ) { $page_type .= ' 作成者アーカイブです'; } elseif ( is_date() ) { $page_type .= ' 日付アーカイブです'; if ( is_year() ) { $page_type .= ' 年別アーカイブです'; } elseif ( is_month() ) { $page_type .= ' 月別アーカイブです'; } elseif ( is_day() ) { $page_type .= ' 日別アーカイブです'; } else { $page_type .= ' その他の日付アーカイブです'; } } elseif ( is_post_type_archive() ) { $page_type .= ' カスタム投稿アーカイブです'; } else { // 存在しないはず } } elseif( is_404() ) { $page_type .= ' 404ページです'; } elseif( is_search() ) { $page_type .= ' 検索結果ページです'; } elseif( is_comments_popup() ) { $page_type .= ' コメントポップアップページです'; } else { $page_type .= 'その他'; } echo $page_type;
適当な場所に、このパーツを挿入して動作テストをしてみます。ここでは、index.phpの途中に挿入してみます。
index.php
<?php get_header(); ?> <div id="content"> <?php get_template_part('show-pagetype'); ?> ・・・
動作を確認する
まずはトップページにアクセスしてみます。
is_front_page()とis_home()にヒットして、正しくページの種類が表示されました。
次に、ダッシュボード>設定>表示設定を開き、フロントページを「固定ページ」に変更してみます。再度トップページにアクセスすると、
今度は、is_front_page()とis_page()にヒットしました。
次に、投稿記事を表示してみます。
個別投稿ページ(post)は、is_singular()、is_single()、is_singular(‘post’)で、正しく条件分岐できることが確認できました。
補足:
条件分岐タグは他にもあります。今回取り上げた条件分岐タグは、ページの種類を区別するタグを中心に取り上げました。他の条件分岐タグについては、Codexの条件分岐タグの記事を参照してください。
次回は、条件分岐タグの実践編としてパンくずリスト作成を取り上げる予定です。それでは^^/
関連記事
WordPress Codex
「index.phpをカスタマイズする」の記事
- 第20回 ギャラリー表示をカスタマイズする
- 第19回 ページ送りを設置する
- 第18回 カテゴリやタグを表示する
- 第17回 記事の表示順、表示数を変更する – 補足
- 第16回 記事の表示順、表示数を変更する
- 第15回 アイキャッチ画像を表示する
- 第14回 抜粋を表示する
- 第13回 パンくずリストを設置する
- 第12回 ページの種類で分岐処理する << この記事です
- 第11回 カスタム投稿タイプを作成する
- 第10回 カスタム背景を設置する
- 第9回 カスタムヘッダーを設置する
- 第8回 カスタムメニューを設置する
- 第7回 コメントフォームをカスタマイズする
- 第6回 コメントフォームを設置する
- 第5回 サイドバーを設置する
- 第4回 functions.phpとは
- 第3回 テンプレートフォルダ内の画像を使用する
- 第2回 テンプレートパーツ化する
- 第1回 HTMLからWPテーマを作成する