• 赤色のリンクは、まだ日本語Codexに存在しないページ・画像です。英語版と併せてご覧ください。(詳細

このWikiはいつでも誰でも編集できます

条件分岐タグ

提供: WordPress Codex 日本語版
2008年4月5日 (土) 03:26時点におけるBono (トーク | 投稿記録)による版 ((wiki)カテゴリ wp2.1, 2.3, 2.5 を追記)

移動先: 案内検索

条件タグ(Conditional Tag)は、テンプレートファイル内で表示される内容や、特定のページ内容を表示する条件を設定するのに使います。例えば、ブログのホームページの上部に短い文を表示させたいとしましょう。is_home()を使えば、簡単に実行できます。

これらのタグはテンプレート階層と深い関わりがあります。

条件の判定

条件タグは、現在のページが指定した条件にマッチするかどうかをチェックし、TRUE もしくは FALSE を返します。以下の条件タグの説明では、TRUE 値が返される場合の説明をしています。また、タグで引数が使える場合は追記してあります。

メインページ

is_home() 
メインページ(ブログのホームページ)が表示されている場合。
WordPress 2.1 以降では、この条件タグの動作がそれまでのバージョンとは異なります。static Front Page (en) を参照してください。

フロントページ

is_front_page() 
サイトのフロントページが表示されている場合。これは、投稿の場合とページの場合があります。管理画面の「設定 -> 表示設定 -> トップページの表示」で、「最新の投稿」が選択されているか、「固定ページ (以下を選択)」で現在のページが表示されている場合。
注: この条件タグは バージョン 2.5 で追加されました。

管理パネル

is_admin()
ダッシュボードまたは管理パネルが表示されている場合。

A Single Post Page

is_single() 
個別記事のページが表示されている場合。
is_single('17') 
ID 17の記事が表示されている場合。
is_single('Irish Stew') 
"Irish Stew"(ビーフシチュー)というタイトルの記事が表示されている場合。
is_single('beef-stew') 
"beef-stew"(ビーフシチュー)という投稿スラッグの記事が表示されている場合。
is_single(array(17,'beef-stew','Irish Stew')) 
ID が 17、投稿スラッグが "beef-stew"、またはタイトルが "Irish Stew" のいずれかにあてはまる記事が表示されている場合。
注: 配列を引数に使えるのは バージョン 2.5 以降からです。

記事を含むページ

comments_open()
WordPress ループ内で処理中の記事がコメント受信を受け付けている場合。
pings_open()
WordPress ループ内で処理中の記事がピン(ピンバックおよびトラックバック)を受け付けている場合。

WordPress ページ

ここでいう「ページ」とは、WordPressにおけるページのことで、いわゆる「Web ページ」とは異なります。詳しくは、「用語について」をご覧ください。

is_page() 
ページが表示されている場合。
is_page('42') 
ID 42のページが表示されている場合。
is_page('About Me And Joe') 
"About Me And Joe"というタイトルページが表示されている場合。
is_page('about-me') 
"about-me"という投稿スラッグページが表示されている場合。
is_page(array(42,'about-me','About Me And Joe')) 
ID が 42、投稿スラッグが "about-me"、またはタイトルが "About Me And Joe" のいずれかにあてはまるページが表示されている場合。
注: 配列を引数に使えるのは バージョン 2.5 以降からです。

サブページかどうかをチェックする

残念ながら、is_subpage()というタグは今のところありませんが、対応策はあります。

<?php
// 関数内なら $post を取得
global $post;

if (is_page() && $post->post_parent ) {
	// サブページの場合
} else {
	// サブページではない場合
}
?>

表示しているのが指定したページか、またはそのページのサブページであることをチェックしたい場合、親ページの ID をバックエンドから取得し、以下のコードを使います。以下は表示中のページによって取得する画像を変える場合の例です。

<?php

if 	(is_page(about) || $post->post_parent=="2") { 
	$bannerimg="home.jpg"; 
} elseif (is_page(learning) || $post->post_parent=="56") {	
	$bannerimg="teaching.jpg"; 
} elseif (is_page(admissions) || $post->post_parent=="15") { 
	$bannerimg="admissions.jpg";	
} else { 
	$bannerimg="home.jpg" ; // 上記以外の場合
}	

?>

ページテンプレート

バージョン 2.5以降から、この条件タグを使って特定のページテンプレートを使っているかどうかをチェックできるようになりました。

is_page_template() 
ページテンプレートが使われている場合。
is_page_template('about') 
"about" というページテンプレートが使われている場合。

カテゴリーページ

is_category() 
あるカテゴリーのアーカイブページが表示されている場合。
is_category('9') 
カテゴリーID 9のアーカイブページが表示されている場合。
is_category('Stinky Cheeses') 
"Stinky Cheeses"というカテゴリーのアーカイブページが表示されている場合。
is_category('blue-cheese') 
"blue-cheese"というカテゴリースラッグのアーカイブページが表示されている場合。
is_category(array(9,'blue-cheese','Stinky Cheeses')) 
Returns true when the category of posts being displayed is either term_ID 9, or slug "blue-cheese", or name "Stinky Cheeses".
注: 配列を引数に使えるのは バージョン 2.5 以降からです。
in_category('5') 
(注: in_category です。) 現在の記事がカテゴリーID 5に属する場合にtrueを返します。 詳細

is_archive()Category Templates/enも参照してください。

タグページ

is_tag() 
タグのアーカイブページが表示されている場合。
is_tag('mild') 
'mild' というスラッグのついたタグのアーカイブページが表示されている場合。
is_tag(array('sharp','mild','extreme')) 
'sharp' または 'mild' または 'extreme' というスラッグのついたタグのアーカイブページが表示されている場合。
注: 配列を引数に使えるのは バージョン 2.5 以降からです。

is_archive() and Tag Templates/en も併せてお読み下さい。

著者ページ

is_author() 
著者のアーカイブページが表示されている場合。
is_author('4') 
ID 4 の著者のアーカイブページを表示している場合。
is_author('Vivian') 
ニックネームが"Vivian"のアーカイブページを表示している場合。
is_author('john-jones') 
"john-jones" という「ナイスネーム」を持つ著者のアーカイブページを表示している場合。
is_author(array(4,'john-jones','Vivian')) 
ID が4、ナイスネームが "john-jones"、またはニックネームが "Vivian" という著者のアーカイブページを表示している場合。
注: 配列を引数に使えるのは バージョン 2.5 以降からです。

is_archive()Author Templates/en も併せてお読み下さい。

日付別ページ

is_date() 
日付別のアーカイブページのいずれかが表示されている場合。(例:月別、年別、日別、時間別)
is_year() 
年別のアーカイブページが表示されている場合。
is_month() 
月別のアーカイブページが表示されている場合。
is_day() 
日別のアーカイブページが表示されている場合。
is_time() 
毎時別、毎分別、毎秒別のアーカイブページが表示されている場合。

is_archive()も併せてお読み下さい。

アーカイブページ

is_archive() 
あらゆるタイプのアーカイブページが表示されている場合。

検索結果ページ

is_search() 
検索結果のページが表示されている場合。

404 Not Found ページ

is_404() 
"HTTP 404: Not Found"エラーページが表示されている場合。

複数ページにわたるページ

is_paged() 
表示中のページが複数のページにわたる場合。これは例えばアーカイブページやメインページに表示する記事数よりも多い記事があり、複数ページに分かれているときを指します。ただし、1つの記事やページのコンテンツが <!--nextpage--> クイックタグ/en で複数に分けられている場合は当てはまりません。

添付ファイルページ

is_attachment() 
記事またはページの添付ファイルが表示されている場合。添付ファイルは、投稿画面のメディアアップロード機能を使ってアップロードした画像などのファイルの事で、テンプレートを使って独自のページ内に表示できます。詳細は、 Using Image and File Attachments/en をご覧下さい。

フィード

is_feed() 
Syndication/en (フィード)がリクエストされた場合。
このタグは通常、一般のユーザーがページを閲覧しているときに条件を判断するためではなく、プラグイン開発の際にWordPress内部で使われます。

トラックバック

is_trackback() 
フックの中にトラックバックの機構が組み込まれている場合。
このタグは通常、一般のユーザーがページを閲覧しているときに条件を判断するためではなく、プラグイン開発の際にWordPress内部で使われます。

プレビュー

is_preview() 
未公開モードで固定リンクページを表示している場合。

概要記述あり

!empty($post->post_excerpt) 
記事に概要の記述があるかどうかをチェックするデフォルトの条件タグはありませんが、このコードで同様の事ができます。概要がない場合をチェックしたい時は、先頭の '!' を取り除きます。

動作サンプル

以下は条件タグの動作サンプルです。

個別記事

以下はis_single()によって特定の情報を個別記事のページでのみ表示させるための例文です。

if (is_single())
{
     echo 'この記事は' . single_cat_title() . 'カテゴリーに属しています';
}

日付別の表示

以下の例は、日付別ページへのアクセスが行われたときに、年別に色分けして表示させます。

<?php
// WordPress ループを開始
if ( have_posts() ) : while ( have_posts() ) : the_post(); ?>
<h2 id="post-<?php the_ID(); ?>">
<a href="<?php the_permalink() ?>" rel="bookmark" title="Permanent Link to <?php the_title(); ?>">
<?php the_title(); ?></a></h2>
<small><?php the_time('Y/n/j') ?> <!-- by <?php the_author() ?> --></small>

<?php
// 日付別アーカイブページかどうかをチェック
if (is_date())
{
     if (date('Y') != get_the_date('Y'))
     {
          // 今年の記事ではない場合、"oldentry" クラスを追加してスタイルを変える
          echo '<div class="oldentry">';
     } else {
          echo '<div class="entry">';
     }
} else {
     echo '<div class="entry">';
}
the_content('続きを読む »'); 
?>
</div>

サイドバーの内容をページによって変更する

以下の例では、閲覧中のページによってサイドバーに表示させる内容を変更します。

<!-- サイドバー開始 -->
<div id="sidebar">
<?php
// 表示中のページに合わせたサイドバーコンテンツを生成
if (is_home()) {
        // ホームページを表示している際、トップレベルカテゴリーの一覧を表示
        echo "<ul>";
        wp_list_cats('optionall=0&sort_column=name&list=1&children=0');
        echo "</ul>";
} elseif (is_category()) {
        // カテゴリーアーカイブページを表示している際、そのカテゴリー内のサブカテゴリーを含む一覧を表示
         echo "<ul>";
        wp_list_cats('optionall=1&sort_column=name&list=1&children=1&hierarchical=1');
        echo "</ul>";
} elseif (is_single()) {
        // 記事の固定リンクページを表示している際は何も表示させない
} elseif (is_page()) {
        // 固定ページを表示しています。どのページ?
        if (is_page('管理人について')) {
             // 「管理人について」ページ
             echo "<p>当ブログの管理人についての説明ページ。</p>";
        } elseif (is_page('ブログについて')) {
             echo "<p>当ブログについての説明ページ。</p>";
        } else {
              // その他の固定ページで表示させたいものがあればここに記入
        }
} else {
        // その他のページ(アーカイブページ、検索、404など)で表示させたいものがあればここに記入
} // 以上で終わりです!
?>
<form id="searchform" method="get" action="<?php echo $_SERVER['PHP_SELF']; ?>">
<div>
<input type="text" name="s" id="s" size="15" />
<input type="submit" value="<?php _e('Search'); ?>" />
</div>
</form>

</div>
<!-- end sidebar -->

分かりやすい 404 ページ

威圧的で役に立たない404エラーページをよく見かけます。WordPress では、存在しないページへのリンクをクリックした時にメールで通知する機能を追加して、404ページの冷たい雰囲気を和らげ、読者にも管理人にも役に立つページにすることが出来ます。以下のスクリプトを使う際は、メールアドレスの設定を忘れずに行ってください。

<p> 
<?php
# スクリプトが使用する変数。変更してもかまいません。
$adminemail = get_bloginfo('admin_email'); # WordPress 管理人のメールアドレス
$website = get_bloginfo('url'); # WordPress サイトの URL
$websitename = get_bloginfo('name'); # WordPress サイトの名称

  if (!isset($_SERVER['HTTP_REFERER'])) {
    # 丁寧にユーザーエラーを指摘 :-)
        echo "ご覧になろうとした"; # 出力する文章の組み立てを開始
	$casemessage = "でも、これが世界の終わりではありません!";
  } elseif (isset($_SERVER['HTTP_REFERER'])) {
    # 読者が探しているページを見つけるためのヒント。また、間違ったリンクを管理人に送信
	echo "クリックされたリンク先の、 "; 
        # 管理人に送信するメッセージを設定
	$failuremess = "読者が $website"
        .$_SERVER['REQUEST_URI']." ページを見ようとした際、404(ページが見つかりません)エラーが発生しました。";
	$failuremess .= "読者が悪いわけではありませんので、原因となる問題を訂正しましょう。
        被リンク元は、 ".$_SERVER['HTTP_REFERER']." です。";
	mail($adminemail, $_SERVER['REQUEST_URI']."への間違ったリンク",
        $failuremess, "From: $websitename <noreply@$website>"); # 問題を管理人へ報告
	$casemessage = "この問題について管理人へメールを自動送信しました。"; #フレンドリーなメッセージを表示
  }
  echo " ".$website.$_SERVER['REQUEST_URI']; ?> 
というページは存在しないようです。</p>
<p><?php echo $casemessage; ?> ブラウザの「戻る」ボタンをクリックして
再度お試しになるか、お探しの内容を検索してみてください。
  <?php include(TEMPLATEPATH . "/searchform.php"); ?>
</p>

ダイナミックメニューハイライト

ダイナミックハイライト/enとは、条件タグを使用して、メニュー内の現在アクセスしているページを際立たせる方法です。

変更履歴

  • バージョン 2.5 :
    • is_front_pageis_page_template を追加。
    • いくつかの条件タグは、引数に配列を渡せるようになりました。
  • Version 2.3 : タグページ用の is_tag() を追加。
  • Version 2.1 :
    • is_home() の動作が変わりました。参照
    • comments_openpings_open を追加。
  • バージョン確認中 :
    • is_preview() を追加。
    • is_admin() を追加。
    • is_attachment() を追加。

最新英語版: WordPress Codex » Conditional Tags最新版との差分


関数リファレンステンプレートタグ目次もご覧ください。