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

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

条件分岐タグ

提供: WordPress Codex 日本語版
移動先: 案内検索

目次

はじめに

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

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

注: 条件分岐タグが使えるのは WordPress の posts_selection アクションフックの後のみです (wp アクションフックはこれらの条件分岐を使える最初のものです)。テーマの function.php 本文内 (関数の外) では正しく動作しません。

しかし query オブジェクトへの参照があれば (例えば parse_query または pre_get_posts フック内から )、WP_Query 条件メソッドを使用できます(例: $query->is_search())。

条件の判定

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

ブログページ

is_front_page()is_home() 

ブログページ用の条件分岐タグはありません。is_home()is_front_page() の両方を使ってこのページを検出する必要がありますが、これらの関数は間違って使われがちです。実際に、ユーザーがある固定ページをホームページとして定義し、別の固定ページでブログを表示するということもあります。この場合ブログページがホームページではないにも関わらず is_home() 関数で true を返します。以下はユーザーが定義できる設定の例です。

  • デフォルトホームページ (最新の投稿を含む)
  • 固定ホームページ、ブログページなし
  • 固定ホームページとブログページ

is_home()is_front_page() を使う場合はバグを防ぐために正しい順序で表記し、すべてのユーザー設定をテストする必要があります。

if ( is_front_page() && is_home() ) {
// デフォルトホームページ
} elseif ( is_front_page() ) {
// 固定ペーシを使ったホームページ
} elseif ( is_home() ) {
// ブログページ
} else {
// それ以外
}

メインページ

is_home() 
メインブログページが表示されている場合。これは、サイトにある時系列のブログコンテンツを表示するページです。もしあなたがフロントページに固定ページを設定していた場合(以下を参照)、Administration > Settings > Readingであなたが「投稿ページ」として設定したページでのみ、trueになります。

フロントページ

is_front_page() 
投稿・固定ページにかかわらず、サイトのフロントページが表示されている場合。
true を返すのは、表示設定の「トップページの表示」として
  • 「最新の投稿」を設定している場合には、メインブログページが表示されるとき
  • 「固定ページ (以下を選択)」を設定している場合には、「フロントページ」として選択した固定ページが表示されるとき


管理画面

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

注': wp-login.php ページは管理パネル内のページではない。このページが表示されているかを確認するには、管理グローバル変数$pagenow を使う。

is_network_admin()
ネットワークダッシュボードやマルチサイトのネットワーク管理パネルが表示されている時。

: wp-login.php は管理者ページではありません。このページが表示されているかを確認するには、管理グローバル変数$pagenowを使う。

管理バー

is_admin_bar_showing() 
管理バーが表示されている場合 true を返す。

 : 管理バー表示をコントロールするには show_admin_bar() / en を使う。この関数は plugins_loaded の後ですぐ呼び出すか、テーマの functions.php ファイルに含める。

個別投稿ページ

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" のいずれかにあてはまる投稿が表示されている場合。
is_single( array( 17, 19, 1, 11 ) ) 
シングルポストのpost IDが17か19か1か11かのどちらかの場合。
is_single( array( 'beef-stew', 'pea-soup', 'chili' ) ) 
シングルポストのpost_nameが"beef-stew"、"pea-soup" または"chili"のいずれかの場合
is_single( array( 'Beef Stew', 'Pea Soup', 'Chili' ) ) 
シングルポストはpost_titleが "Beef Stew"、"Pea Soup"または"Chili"のいずれかの場合

注: この関数は投稿 ID、投稿タイトル、または投稿名を区別しません。投稿 ID が「17」の投稿をリクエストした場合、タイトルや投稿スラッグが「17」の投稿が表示されることがあります。

先頭固定表示の投稿

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

階層を持つ投稿タイプ

is_post_type_hierarchical($post_type) 
この条件分岐タグは、その投稿タイプが階層型かどうかチェックします。これはブール関数であり、TRUEかFALSEを返します(FALSEは、その投稿タイプが存在しないことを意味するかもしれません)。

最初にその投稿タイプが存在することをチェックします。そして投稿タイプのオブジェクトを取得し、最終的にそのオブジェクト内の階層型かどうかの値を返します。

投稿タイプアーカイブ

is_post_type_archive() 
現在のクエリが、引数に与えられた投稿タイプのアーカイブページのものかどうかチェックする。
is_post_type_archive( $post_type ) 
$post_type に一致する投稿タイプアーカイブページの場合に true を返す。
is_post_type_archive( array( 'foo', 'bar', 'baz' ) ) 
投稿タイプアーカイブページが "foo"/"bar"/"baz" いずれかに一致する場合に true を返す。

投稿タイプアーカイブを有効にするには、その投稿タイプを登録する際に 'has_archive' => true を使う。

コメントポップアップ

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

投稿を含むページ

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

WordPress ページ

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

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" のいずれかにあてはまる固定ページが表示されている場合。
is_page( array( 42, 54, 6 ) ) 
ID が 42、54、または6のいずれかの固定ページが表示されている場合。

他のスニペットについては is_page() を参照。

: 固定ページがサブページかどうかをチェックする関数はありません。この問題を解決するには以下を参考にしてください。

if ( is_page() && $post->post_parent > 0 ) {
    echo "これは子ページです";
}

ページテンプレート

この条件分岐タグを使うと、特定のページテンプレートを使っているかどうかをチェックできます。

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

: ファイルがサブディレクトリにある場合はファイル名のみだけではなくパスも含める必要があります。例: page-templates/about.php

カテゴリーページ

is_category() 
ページが $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" のいずれかにあてはまる場合、真を返す。
in_category( '5' ) 
(注: in_category です。) 現在の投稿がカテゴリーID 5に属する場合に true を返します。 詳細
in_category( array( 1,2,3 ) ) 
現在の記事が、カテゴリID 1、2、3のいずれかに属している場合は true を返します。
! in_category( array( 4,5,6 ) ) 
現在の記事が、カテゴリID 4、5、6のいずれにも属していない場合は true を返します。先頭に「!」が付くことに注目してください。

注意: テストの際にはスペリングをしっかりチェックしましょう。"is" と "in" では意味が大きく異なります。

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

タグページ

is_tag() 
タグのアーカイブページが表示されている場合。
is_tag( 'mild' ) 
'mild' というスラッグのついたタグのアーカイブページが表示されている場合。
is_tag( array( 'sharp', 'mild', 'extreme' ) ) 
'sharp' または 'mild' または 'extreme' というスラッグのついたタグのアーカイブページが表示されている場合。
has_tag() 
タグのある投稿がループ内で表示されている場合。バージョン2.7以前ではループ内で使う必要がある。
has_tag( 'mild' ) 
'mild' というタグのある投稿が表示されている場合。
has_tag( array( 'sharp', 'mild', 'extreme' ) ) 
配列内のいずれかのタグのある投稿が表示されている場合。

is_archive()タグテンプレート/en もあわせてお読みください。

タクソノミーページ (その他関連するもの)

is_tax

is_tax() 
タクソノミーのアーカイブページが表示されている場合。
is_tax( 'flavor' ) 
'flavor' というスラッグのついたタクソノミーのアーカイブページが表示されている場合。
is_tax( 'flavor', array( 'sharp', 'mild', 'extreme' ) ) 
'sharp' または 'mild' または 'extreme' というスラッグのついた flavor タクソノミーのアーカイブページが表示されている場合。

is_archive() もあわせてお読みください。

has_term

has_term() 
現在のポストが指定の項目(term)を持つかどうかを確認します。最初のパラメータは空の文字列である必要があります。2番目のパラメータには、分類のスラッグ、または名前を指定します。
has_term( 'green', 'color' ) 
現在の投稿が分類 'color' の項目 'green' をもつ場合。
has_term( array( 'green', 'orange', 'blue' ), 'color' ) 
現在の投稿が配列内の任意の項目をもつ場合。

term_exists

term_exists( $term, $taxonomy, $parent ) 
任意の分類の中に $term が存在すれば true を返す。$taxonomy が指定された場合、項目はその中に存在する必要がある。3番目のパラメータ $parent もまたオプションで、指定された場合、項目はこの親の子である必要があり、分類は階層型でなければならない。

is_taxonomy_hierarchical

is_taxonomy_hierarchical( $taxonomy ) 
分類 $taxonomy が階層型なら true を返す。階層型分類を宣言するには、register_taxonomy() を使用する際に 'hierarchical' => true を使用してください。

taxonomy_exists

taxonomy_exists( $taxonomy ) 
あるタクソノミーが register_taxonomy() を使って登録されている場合 true を返す。

is_archive() もあわせてお読みください。

作成者ページ

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" という作成者のアーカイブページを表示している場合。

is_archive()作成者テンプレート/en もあわせてお読みください。

作成者ページ

is_multi_author() 
サイト上に一人以上投稿を公開しているユーザーがいる場合。バージョン 3.2 から導入された。

is_archive()作成者テンプレート/en もあわせてお読みください。

日付別ページ

is_date()  
日付別のアーカイブページのいずれかが表示されている場合。(例:月別、年別、日別、時間別)
is_year() / en 
年別のアーカイブページが表示されている場合。
is_month() / en 
月別のアーカイブページが表示されている場合。
is_time() / en 
毎時別、毎分別、毎秒別のアーカイブページが表示されている場合。
is_new_day() / en 
投稿の日付が新しい日の場合。ループ内で使う。

is_archive() もあわせてお読みください。

アーカイブページ

is_archive() 
各アーカイブページが表示されている場合。アーカイブページには、カテゴリー、タグ、その他のタクソノミー項目、カスタム投稿タイプアーカイブ、作成者、日付別のものがあります。

検索結果ページ

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

404 Not Found ページ

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

複数にわたるページ

is_paged() 
表示中のページが複数のページにわたる場合。これは例えばアーカイブページやメインページに表示する投稿数よりも多い投稿があり、複数ページに分かれているときを指し、2ページ目以降のときに true を返します。ただし、1つの投稿や固定ページの本文が <!--nextpage--> クイックタグで複数ページに分けられている場合は当てはまりません。投稿または固定ページが <!--nextpage--> クイックタグを使って分割されているかどうか調べるには、ページ分けされている固定ページであるか をご覧ください。

添付ファイルページ

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

詳しくは 画像や添付ファイルの使い方/en もご覧ください。

画像の添付ファイル

wp_attachment_is_image( $post_id ) 
投稿 ID が $post_id と一致する投稿の添付ファイルが画像の場合 true を返す。許可されている Mime 形式および拡張子は以下のとおり: .jpg, .jpeg, .gif, et .png.

ローカル添付ファイル

is_local_attachment( $url ) / en 
$url に渡されたリンクが、このサイトからの実際の添付ファイルであれば true を返す。

シングルページ (固定ページ、個別投稿ページ、添付ファイルページ)

is_singular() 
is_single()is_page()is_attachment() のいずれかが真である場合に true を返す。
is_singular( 'foo' ) 
'foo' というカスタム投稿タイプの場合に true を返す。
is_singular( array( 'foo', 'bar', 'baz' ) ) 
'foo'/'bar'/'baz' というカスタム投稿タイプの投稿を表示している場合に true を返す。

カスタム投稿タイプも参照。

登録済み投稿タイプ

post_type_exists( $post_type ) 
指定した $post_typeregister_post_type() を使ってこのサイトに登録されている場合に true を返す。

メインクエリ

is_main_query()
現在のクエリ (ループ内など) が「メイン」クエリの場合に true を返す。

フィルターフック the_content を使った例

add_action( 'the_content', 'baw_add_social_buttons' );
function baw_add_social_buttons( $content ) {
    if ( ! is_admin() && is_main_query() ) {
        return $content . function_from_a_social_plugin();
    }
    return $content;
}

WordPress が各投稿のコンテンツをループ内または個別投稿ページで表示しようとした際に、それがメインクエリ内であり管理画面ではない場合、(例えば) ソーシャルボタンを表示する。

アクションフック pre_get_posts を使った例

add_action( 'pre_get_posts', 'baw_modify_query_exclude_category' );
function baw_modify_query_exclude_category( $query ) {
    if ( ! is_admin() && $query->is_main_query() && ! $query->get( 'cat' ) ) {
        $query->set( 'cat', '-5' );
    }
}

pre_get_posts を使って直接 is_main_query を呼び出すことはできないため、引数として $query を使う。

新しい日付

is_new_day() /en 
新しい日付の場合 true を返す。

フィード

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

トラックバック

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

プレビュー

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

抜粋あり

has_excerpt() 
投稿に (手動で書かれた) 抜粋がある場合。
has_excerpt( '42' ) 
投稿 ID 42 の投稿に抜粋がある場合。

ナビゲーションメニュー割り当てあり

has_nav_menu() /en

 : 登録済みのナビゲーションメニューロケーションにメニューが割り当てられている場合に true を返す。

register_nav_menu() も参照。

ループ内

in_the_loop() 
ループ内かどうかをチェックする。ループ内にあった場合真を返すので、プラグイン作者に便利。

ダイナミックサイドバー対応

is_dynamic_sidebar() 
テーマがダイナミックサイドバーに対応している場合 true を返す。

サイドバー使用中

is_active_sidebar() 
指定したサイドバーが使用中の場合、true を返す。サイドバー名、ID を指定できる。

: サイドバーのコンテンツを表示するには dynamic_sidebar( $sidebar ) を使う。

ウィジェット使用中

is_active_widget( $widget_callback, $widget_id ) 
$widget_callback というコールバックのウィジェットまたは ID$widget_id フロントエンドに表示される場合に true を返す。

 : 有効化するには、この関数をウィジェットの初期化後、すなわち、アクション 'init' またはその後で実行する必要がある。アクションフック一覧参照。

ブログインストール済み

is_blog_installed() /en 
現在のブログが適切にインストールされている場合 true を返す。

: 最初にキャッシュが確認される。キャッシュ値を保存するキャッシュプラグインを有効化している場合、この関数は動作する。デフォルトの WordPress キャッシュを使用していて、データベースが停止した場合、問題が発生するかもしれない。

RTL 読み

is_rtl() 
現在のロケールが右から左に読まれるものの場合 true を返す。

 if ( is_rtl() ) {
   wp_enqueue_style(  'style-rtl',  plugins_url( '/css/style-rtl.css', __FILE__ ) );
   wp_enqueue_script( 'script-rtl', plugins_url( '/js/script-rtl.js',  __FILE__ ) );
 }

ネットワークの一部(マルチサイト)

is_multisite() /en 
現在のサイトがマルチサイトインストールの一部かどうかチェックする。

メインサイト(マルチサイト)

is_main_site() /en 
サイトがネットワークのメインサイトかどうかチェックする。

ネットワークの管理者(マルチサイト)

is_super_admin() 
ユーザーがネットワークの特権管理者かどうかをチェックする。

ユーザーログイン済み

is_user_logged_in() 
権限グループに関わらず、ユーザーの誰かがログイン中の場合 true を返す。

既存メール

email_exists( $email ) 
指定されたメールアドレス $email がユーザー名として登録されているかどうかを確認する。登録されている場合はユーザーの ID を返し、存在しない場合 false を返す。

既存ユーザー名

username_exists( $username ) /en 
指定されたユーザー名 $username がユーザー名として登録されているかどうかを確認する。登録されている場合はユーザーの ID を返し、存在しない場合 false を返す。

有効化済みプラグイン

is_plugin_active( $path ) 
プラグインが有効化されているかチェックする。
is_plugin_active( 'akismet/akismet.php' ) 
Akismet が有効化されているかチェックする。
is_plugin_inactive( $path ) /en 
プラグインが無効化されているかチェックする。! is_plugin_active( $path ) と同じ。
is_plugin_active_for_network( $path ) /en 
マルチサイト環境でのネットワークで有効化と同じ
is_plugin_page() /en 
ロードされたページが管理画面のプラグインページであれば true を返す。この関数は WordPress 3.1 から非推奨です。代替はありません。

子テーマ

is_child_theme() /en 
子テーマが使われているかどうかチェックする。

機能対応のテーマ

current_theme_supports() /en 
テーマに機能が存在するかチェックする。
current_theme_support( 'post-thumbnails' ) 
現在のテーマが アイキャッチ画像 をサポートすれば true を返す。テーマに機能を追加するには add_theme_support() を使用する。

アイキャッチ画像あり

has_post_thumbnail( $post_id ) 
ID$post_id の投稿がアイキャッチ画像を含めば true を返す。テーマはアイキャッチ画像をサポートする必要がある。機能対応のテーマ 参照。

スクリプト使用中

wp_script_is( $handle, $list ) /en 
handle$handle のスクリプトが $list で指定された 'registered'、'enqueue/queue'、'done'、'to_do' であれば true を返す。

用例

    $handle = 'fluidVids.js';
    $list = 'enqueued';
      if ( wp_script_is( $handle, $list ) ) {
        return;
      } else {
        wp_register_script( 'fluidVids.js', plugin_dir_url(__FILE__).'js/fluidvids.min.js');
        wp_enqueue_script( 'fluidVids.js' );
      }

スクリプト 'fluidVids.js' が enqueue されているかどうか確認します。もし enqueue されていなければ、ファイルは登録され、enqueue される。

カスタマイザーでプレビュー中

is_customize_preview() /en 
Customizer内でサイトのプレビュー中ならtrue、それ以外ならfalseを返す。


動作サンプル

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

個別投稿

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

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

このカスタム関数を子テーマの functions.php ファイルに追加し、必要に応じて条件分岐タグを変更してください。

add_action( 'loop_start', 'add_to_single_posts' );
function add_to_single_posts() {
if ( is_single('post') ) {
echo'<div class="your-class">Your Text or HTML</div>';
    }
}

以下のようにも使えます。

add_action( 'loop_start', 'wpsites_add_to_single_posts' );
function wpsites_add_to_single_posts() {
if ( is_single() ) {
echo'<div class="your-class">Your Text or HTML</div>';
    }
}

ループ内で条件分岐タグを使用する別の例。index.php 内で、個別の投稿を表示するか、ホームページを表示する場合にコンテンツを表示し、それ以外では抜粋を表示する。

if ( is_home() || is_single() ) {
   the_content();
}
else {
   the_excerpt();
}

ホームページでない場所では、コードまたは要素を表示する必要がある場合。

<?php if ( ! is_home() ) {?>
 ここにマークアップを挿入 ...
<?php } ?>

複数の条件をチェックする

PHP 演算子を使って、ひとつの宣言内で複数の条件をチェックできます。

// 2つの条件をチェック

if ( is_single() || is_page() ) ) {
    // 個別の投稿または固定ページであれば、何かを行う
}

if ( is_archive() && ! is_category( 'nachos' ) ) {
    // カテゴリー「nachos」を除く任意のカテゴリーアーカイブページであれば、何かを行う
}
// 3つの条件をチェック

if ( $query->is_main_query() && is_post_type_archive( 'products' ) && ! is_admin() ) {  
    // カスタム投稿タイプ Products アーカイブのメインクエリであり、
    // かつ、WordPress admin でなければ、何かを行う
}

if ( is_post_type_archive( 'movies' ) || is_tax( 'genre' ) || is_tax( 'actor' )  ) {
    // カスタム投稿タイプ Movie アーカイブ
    // または 分類 Genre アーカイブ
    // または 分類 Actor アーカイブならば、何かを行う
}


日付別の表示

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

<?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_attribute(); ?>">
<?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_categories('optionall=0&sort_column=name&list=1&children=0');
	 echo "</ul>";
} elseif ( is_category() ) {
	// カテゴリーアーカイブページを表示している際、そのカテゴリー内のサブカテゴリーを含む一覧を表示
	echo "<ul>";
	wp_list_categories('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 esc_url( $_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エラーページの作成」という記事の「サーバーが 404 ページを見つけるのを助ける」というセクションに、PHP の条件分岐関数 isset() を使う例が書かれています。


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

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

テーマの footer.php ファイル内

sidebar.php などの他のテンプレートファイルによってクエリが実行された場合、元の条件分岐タグは破損してしまいます。例えば、header.php では条件分岐タグが適切に機能するのに、footer.php では正しく機能しないトラブルがよくあります。これを解決するにはフッターで条件分岐タグを使う前に wp_reset_query を実行します:

<?php
wp_reset_query();
if ( is_page( '2' ) ) {
	echo 'ページ 2 です。';
} 
?>

このようなトラブルを無くすために、別の場所(テンプレートファイルやプラグイン)でクエリを実行した場合は、必要な処理を終えた後に必ず wp_reset_query を実行するようにしましょう。

<?php
query_posts('posts_per_page=5&cat=123');
if( have_posts() ) :
  while( have_posts() ) :
    the_posts();
    /* 投稿を出力するなどの処理... */
  endwhile;
else :
  /* 該当する投稿がない場合、何もしない */
endif;
wp_reset_query();
?>

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

アルファベット順一覧

外部リソース

変更履歴

  • 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最新版との差分

関数リファレンス

条件分岐タグis_404(), is_admin(), is_admin_bar_showing(), is_archive(), is_attachment(), is_author(), is_category(), is_comments_popup(), is_date(), is_day(), is_feed(), is_front_page(), is_home(), is_local_attachment(), is_main_query, /is_multi_author, is_month(), is_new_day(), is_page(), is_page_template(), is_paged(), is_plugin_active(), is_plugin_active_for_network() /en, is_plugin_inactive() /en, is_plugin_page() /en, is_post_type_archive(), is_preview() /en, is_search(), is_single(), is_singular(), is_sticky(), is_tag(), is_tax(), is_taxonomy_hierarchical(), is_time(), is_trackback(), is_year(), in_category(), in_the_loop(), is_active_sidebar(), is_active_widget(), is_blog_installed() /en, is_rtl(), is_dynamic_sidebar(), is_user_logged_in(), has_excerpt(), has_post_thumbnail(), has_tag(), pings_open(), email_exists(), post_type_exists(), taxonomy_exists(), term_exists(), username_exists() /en, wp_attachment_is_image(), wp_script_is()