秋田のデザイン事務所 SeeVisionsのウェブチームがお送りする技術系ブログです。
基本的に業務内外で使用した技術や知識を備忘録的にまとめていきます。
だれかのお役に立てば幸いです。

WordPressでのページの種類によって処理を分岐する方法 その1【ページタイトル編】

小中規模のサイト構築だと、導入の比較的簡単なWordPressが非常に重宝してます。そんなWordPressですが、テンプレートタグや分岐条件タグなどが多数にあるため、記述する場面によってどのタグを使うのか迷ってしまうことが結構あります。そこで、「ページの種類によって処理を分岐する方法」と題して、分岐処理をしたい場所によってどんな記述をすればいいのかをまとめていきます。まず、第一弾として、ページタイトルをページごとに分岐する方法をまとめていきます。
※第一弾なので、条件分岐の基本的なところから書いています。すでに分かっている方は、「下の判定ができたら、それぞれに必要なテンプレートタグを入力」まで飛ばしていただいて結構です。

ページの種類判定は、if文で

まず基本として、現在表示しているページを判別しなければなりません。そこでifを使用して、現在のページを判定します。
以下が基本形。

<?php if(○○○); ?>
//判定がオッケーなら実行する内容
<?php else; ?>
//判定がだめなら実行
<?php endif; ?>

○○○の中に判定基準を入れます。ある程度は決まった条件が揃ってるので、大抵は決まった条件タグを入れるだけ。
まずはトップページの判定を例に記述内容を確認。

トップページを判定 is_home()

is_home()でトップページかどうかを判別できます。

<?php if(is_home()); ?>
//トップページが表示されている場合
<?php else; ?>
//それ以外
<?php endif; ?>

ただ、これだとトップページをページ分割している場合などは、2ページ以降もトップページと認識されます。
なので、純粋に1ページ目だけを指定したい場合は、同時に「ページ分割されたページではない」判定をします。記述だと「 && !is_paged() 」となります。&&は「AND」って意味で、「is_homeに加えて!is_pagedならば」って意味になりま す。!is_pagedは、!が「等しくない」って感じの意味で、is_pagedはページ分割されたページ(2ページ目以降)かを判別します。要するに 「ページ分割されたページじゃなければ」ってことですね。

<?php if(is_home() && !is_paged()); ?>

条件分岐タグまとめ

・個別記事のページを判定 is_single()

is_single()で個別記事かどうかを判別できます。()内に記事IDを記述するとさらに絞り込み可能。

<?php if(is_single("記事のID")); ?>

・固定ページを判定 is_page()

is_page()で個別記事かどうかを判別できます。()内に固定ページのタイトルやIDを記述するとさらに絞り込み可能。

<?php if(is_page("個別記事のタイトルとかID")); ?>

・カテゴリーアーカイブページを判定 is_category()

is_category()でカテゴリーアーカイブページかどうかを判別できます。()内にカテゴリ名やIDを記述するとさらに絞り込み可能。
※ここで注意なのが、あくまでページの判定である点。カテゴリーアーカイブページであるか否かを判定しているのであって、カテゴリーの種類だけで判別はし ていない。よって、is_category(“example”)は「exampleカテゴリーのアーカイブページであるかどうか」で、exampleカ テゴリーかどうかだけでは判別されない。個別記事などでカテゴリー別に処理を行いたい場合などに間違えて使うことがよくある。個別記事などの投稿ごとの所 属カテゴリの判別には「 in_category() 」を使用する。

<?php if(is_category("カテゴリー名とかID")); ?>

・月別アーカイブページを判定 is_category()

is_month()で月別アーカイブページかどうかを判別できます。他にも年別「is_year()」とか日別「is_date()」とかある。

<?php if(is_month()); ?>

タイトルの分岐でよく使うのはだいたいこの辺り。
もっといろいろ知りたい人は、条件分岐タグ – WordPress Codex 日本語版へどうぞ。

判定ができたら、それぞれに必要なテンプレートタグを入力

こ こからは、ぶっちゃけ人それぞれというかサイトによってタイトルに出したい情報が変わってくると思います。更に、テンプレートタグは種類が多く、いろんな 使い方ができるため、ここで書いてある方法が正しい使い方になってるかは自信ありません。また、ループ中やループ外によっても使用タグが変わってきたりし て結構複雑です。なので、とりあえず本サイトの例を上げときます。

<?php if(is_home()): ?>
<title>CREATIVE BLOG by SeeVisions</title>

<?php elseif(is_page()): ?>
<title>このサイトについて|CREATIVE BLOG by SeeVisions</title>

<?php elseif(is_single()): ?>
<title><?php wp_title(''); ?>|CREATIVE BLOG by SeeVisions</title>

<?php elseif(is_category()): ?>
<title><?php single_cat_title() ?>の記事一覧|CREATIVE BLOG by SeeVisions</title>

<?php elseif(is_month()): ?>
<title><?php the_time("Y年m月") ?>の記事一覧|CREATIVE BLOG by SeeVisions</title>

<?php endif; ?>

もっとちゃんと設定しろよって話ですけど、取りあえずはこんな感じでも問題ないはず…
※補足としては、<?php elseif(); ?>というのが出てきましたけど、これは前の条件に合わなければ、次の条件を更に設定するもの。
上のコードだと、まず「トップページなら」で分岐、次に「トップページじゃなくて、固定ページなら」で分岐、次に「トップページじゃなくて、固定ページでもなくて、個別記事ページなら」って感じです。正しい訳かは分からないけど、そんなに間違ってもないと思います。

・個別記事ページなら投稿タイトルを表示 wp_title( ” )

wp_title( ” )で現在表示しているページのタイトルが表示できる。
これはテンプレートによって書き出す内容が変わり、個別記事なら投稿タイトル、カテゴリアーカイブページならカテゴリ名になるので、特にこだわりないので あれば取りあえずこのタグを入れておけばなんとかなる。()内で引数を指定することができる。なにも入れないとタイトル前に「≫」が表示されるので、いら ない人は「”」と何もいれず、シングルクォーテーションで括るだけにしとけばOKです。

また、「single_post_title() 」でも投稿タイトルを表示可能。ただし、個別記事ページでしか機能しないので、それ以外のページだと何も出力されなくなるので、注意。今回のように個別記事ページでの処理に限るなら利用可能。

ちなみに、ヘッダーでの記述なので、基本的にはループ外になるので、「the_title()」は使えません。

<?php wp_title(''); ?>

・カテゴリアーカイブページならカテゴリ名を表示 php single_cat_title()

<?php single_cat_title() ?>で現在表示しているカテゴリアーカイブページのタイトルが表示できる。カテゴリーアーカイブなのにsingleって付いてるのでややこしいです が、このタグはカテゴリーアーカイブページで機能するので、個別記事ページで所属カテゴリ絵名を出したい場合などは使えません。カテゴリーの扱いは、 WordPressの中でも複雑でちょっと難しいと思ってるので、後でカテゴリーに関するエントリーをまとめようと思います。

<?php single_cat_title(); ?>

・月別アーカイブページなら日時(年月)を表示 wp_title(”) もしくは the_time(“Y年m月”)

<?php wp_title() ?>で 現在表示している月別アーカイブページの日付が表示できる。
先ほどは投稿タイトルとして機能していたが、表示ページが月別アーカイブの時は、表示している年と月が表示される。ところが、このタグだと表示部分の カスタムができず、2012 2月という表示になる。これを2012年2月などのように変えたい場合は、別のタグを使用する必要がある。
しかし、ループ外で月別の日時を表示するタグが無いため、the_time()を使用する。本来ループ内で使用するタグだが、一応機能はする。このタグであれば()内に表示方法を記述してやれば、自由に日付を表示できる。()内の記述は、PHP: date – Manualを参照してください。

<?php wp_title(); ?>

 

<?php the_time("Y月m月"); ?>

以上が本サイトにて使用している、タイトルの記述です。
まぁ、もっといろいろカスタマイズは出来ると思いますし、SEO的にもやれることはあると思いますが、基本としてはこんなところを抑えておけば間違いないかと思います。
テンプレートタグについてもっと知りたい方は以下のサイトをご覧ください。

テンプレートタグ – WordPress Codex 日本語版

WordPressでのページの種類によって処理分岐する方法 その1【ページタイトル編】はこのくらいで、
次は、その2【パンくずリスト編】をやろうかと考えています。

もし少しでもお役に立てたなら、下記のいいねボタンとか押していただければと思います。押してください。

ここまで読んでいただきありがとうございました。

  • このエントリーをはてなブックマークに追加