Conditional Tags

出典: WordPress Codex 日本語版

この項目「Conditional Tags」は、翻訳チェック待ちの項目です。加筆、訂正などを通して、Codex ドキュメンテーションにご協力下さい。

ページ名検討中: このページ名「Conditional Tags」について改名が提案されています。ご意見をお寄せください。

目次

はじめに

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

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

条件の判定

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

メインページ

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

注: もし表示設定で固定ページをフロントページに設定した場合、このタグは投稿ページのトップページに適用されます (下の項目参照)。

フロントページ

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

管理パネル

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

個別投稿ページ

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 以降からです。

先頭固定表示の投稿

is_sticky() 
投稿編集ページで「この投稿を先頭に固定表示」のチェックボックスがついている投稿が表示されている場合。もし ID 変数が指定されていない場合、投稿 ID は WordPress ループの投稿のものになる。
注: この条件タグは バージョン 2.7 で追加されました。
is_sticky('17') 
ID 17 の投稿が先頭固定表示の場合、真を返す。

コメントポップアップ

is_comments_popup() 
コメントポップアップウィンドウが表示されている場合。

記事を含むページ

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 {
    // サブページではない場合
}
?>

下記のコードをテーマフォルダ内の functions.php ファイル (なければ作成する) に追加します。

function is_tree($pid) {    // $pid = 探しているサブページ
	global $post;       // 投稿の外にいるのでこれを読み込む
	if(is_page()&&($post->post_parent==$pid||is_page($pid))) return true; // ツリー内の場合
	else return false;  // ツリーの外の場合
};

そして is_tree('id') を呼び出し、そのページがツリー内にあるかチェックします。以下の例では、 最初の if 内で is_tree('2') が "is_page('about') || $post->post_parent == '2'" に置き換えられます。もし複数階層のページがある場合、親ページは一つ上の階層のページであり、一番上の階層のページではありません。

表示しているのが指定したページか、またはそのページのサブページであることをチェックしたい場合、親ページの 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'; // 上記以外の場合
}	

?>

もしこれを何度も使いたいなら、メンテナンスしやすい関数 (is_cpage()) を作成するのをお勧めします。例えば、もし is_subpage() という関数が WordPress に登場した場合、functions.php を書き換えるだけで簡単に入れ替えることができます。

ページテンプレート

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

is_page_template() 
ページテンプレートが使われている場合。
is_page_template('about.php') 
"about" というページテンプレートが使われている場合。他の条件分岐タグとは違い、特定のテンプレートを選びたい場合には about.php などのファイル名を指定する必要があります。

カテゴリーページ

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')) 
投稿のカテゴリーが term_ID 9、スラッグが "blue-cheese" の場合、カテゴリー名が "Stinky Cheeses" のいずれかにあてはまる場合、真を返す。
注: 配列を引数に使えるのは バージョン 2.5 以降からです。
in_category('5') 
(注: in_category です。) 現在の記事がカテゴリーID 5に属する場合にtrueを返します。 詳細

is_archive()カテゴリーテンプレート/enも参照してください。

タグページ

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

is_archive()タグテンプレート/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()著者テンプレート/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_singular() 
is_single()is_page()is_attachment() のいずれかが真である場合。

フィード

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

トラックバック

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

プレビュー

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

抜粋あり

has_excerpt() 
投稿に (手動で書かれた) 抜粋がある場合。
has_excerpt('42') 
投稿 ID 42 の投稿に抜粋がある場合。
<?php
//  もし関数内なら $post を取得
global $post;

if ( empty($post->post_excerpt) ) {
    // 投稿に抜粋がない場合
} else {
    // 投稿に抜粋がある場合
}
?>

ループ内

in_the_loop() 
ループ内の場合、真を返す。

サイドバー使用中

is_active_sidebar() 
指定したダイナミックサイドバーが使用中の場合、真を返す。サイドバー名、ID、番号を指定できる。
注: この条件タグは バージョン 2.8 で追加されました。

動作サンプル

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

個別記事

以下は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 ページ

Creating an Error 404 Page という記事の サーバーが 404 ページを見つけるのを助ける というセクションに、PHP の条件分岐関数 isset() を使う例が書かれています。


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

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

条件分岐タグ インデックス

アルファベット順一覧 I アルファベット順一覧 II

変更履歴

  • 2.8 : is_active_sidebar を追加。
  • (バージョン未確認): is_comments_popup, is_singular, has_excerpt, in_the_loop を追加。
  • 2.7 : is_sticky() を追加。
  • 2.6 : has_tag() を追加。
  • バージョン 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最新版との差分

関数リファレンス

Template:Conditional Tags

他の言語