当サイト、Codex 日本語版は今後積極的な更新は行わない予定です。後継となる新ユーザーマニュアルは、https://ja.wordpress.org/support/ にあります。
万が一、当サイトで重大な問題を発見した際などは、フォーラムWordSlack #docs チャンネルでお知らせください。</p>

「条件分岐タグ」の版間の差分

提供: WordPress Codex 日本語版
移動先: 案内検索
(2.7: is_sticky() 追加、is_page_template() 引数誤記訂正・注釈追記/2.6: has_tag() 追加/ほかリンク微調整等。未翻訳)
(ダイナミックメニューハイライト: リンク修正)
370行目: 370行目:
 
</div>
 
</div>
  
[[Dynamic Menu Highlighting|ダイナミックハイライト]]/[[:en:Dynamic Menu Highlighting|en]]とは、条件タグを使用して、メニュー内の現在アクセスしているページを際立たせる方法です。
+
[[ダイナミックハイライト]]/[[:en:Dynamic Menu Highlighting|en]]とは、条件タグを使用して、メニュー内の現在アクセスしているページを際立たせる方法です。
  
 
== 変更履歴 ==
 
== 変更履歴 ==

2009年2月18日 (水) 10:15時点における版

このページ「条件分岐タグ」は一部未翻訳です。和訳や日本語情報を加筆してくださる協力者を求めています

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


このページは最新情報に追随して更新されていません。英語版のテーマハンドブックコードリファレンスをご確認ください。翻訳にご協力くださる方はぜひご相談ください


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

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

条件の判定

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

メインページ

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

Note: If you select a static Page as your frontpage (see below), this tag will be applied to your "posts page".

フロントページ

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

A Sticky Post

is_sticky() 
Returns true if "Stick this post to the front page" check box has been checked for the current post. In this example, no post ID argument is given, so the post ID for the Loop post is used. Note: this tag was added at Version 2.7.
is_sticky('17') 
Returns true when Post 17 is considered a sticky post.

記事を含むページ

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.php') 
"about" というページテンプレートが使われている場合。Note that unlike with other conditionals, if you want to specify a particular Page Template, you need to use the filename, such as about.php or my_page_template.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')) 
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()カテゴリーテンプレート/enも参照してください。

タグページ

is_tag() 
タグのアーカイブページが表示されている場合。
is_tag('mild') 
'mild' というスラッグのついたタグのアーカイブページが表示されている場合。
is_tag(array('sharp','mild','extreme')) 
'sharp' または 'mild' または 'extreme' というスラッグのついたタグのアーカイブページが表示されている場合。
注: 配列を引数に使えるのは バージョン 2.5 以降からです。
has_tag() 
When the current post has a tag. Must be used inside The Loop. Note: has_tag was added at Version 2.6.
has_tag('mild') 
When the current post has the tag 'mild'.
has_tag(array('sharp','mild','extreme')) 
When the current post has any of the tags in the array.

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() 
あらゆるタイプのアーカイブページが表示されている場合。Category, Tag, Author and Date based pages are all types of Archives.

検索結果ページ

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(フィード)がリクエストされた場合。
このタグは通常、一般のユーザーがページを閲覧しているときに条件を判断するためではなく、プラグイン開発の際に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.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最新版との差分


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