- 赤色のリンクは、まだ日本語Codex に存在しないページ・画像です。英語版と併せてご覧ください。(詳細)
- この Wiki はいつでも誰でも編集できます。ログインアカウントの取得からどうぞ :)
- 5月23日に MySQL 4.0 → 5 へ移行しました。動作不良等があればご一報ください (連絡先)
Conditional Tags
出典: WordPress Codex 日本語版
この項目「Conditional Tags」は、翻訳チェック待ちの項目です。加筆、訂正などを通して、Codex ドキュメンテーションにご協力下さい。
はじめに
条件タグ(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における固定ページのことで、いわゆる「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()
- 検索結果のページが表示されている場合。
- 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 -->
Creating an Error 404 Page という記事の サーバーが 404 ページを見つけるのを助ける というセクションに、PHP の条件分岐関数 isset() を使う例が書かれています。
ダイナミックハイライトとは、条件タグを使用して、メニュー内の現在アクセスしているページを際立たせる方法です。
変更履歴
- 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_page、is_page_templateを追加。 - いくつかの条件タグは、引数に配列を渡せるようになりました。
-
- Version 2.3 : タグページ用の
is_tag()を追加。 - Version 2.1 :
-
is_home()の動作が変わりました。参照 -
comments_open、pings_openを追加。
-
- バージョン確認中 :
-
is_preview()を追加。 -
is_admin()を追加。 -
is_attachment()を追加。
-
原文・最新版: WordPress Codex » Conditional Tags (最新版との差分)

