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

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

提供: WordPress Codex 日本語版
移動先: 案内検索
(重複している冒頭の注意文を削除。)
 
(13人の利用者による、間の67版が非表示)
1行目: 1行目:
<!-- http://codex.wordpress.org/Conditional_Tags -->
+
{{テーマ・テンプレートガイド}}
== Introduction ==
+
== はじめに ==
  
 条件タグ(Conditional Tag)はテンプレートファイル内で表示される内容、表示させる対象ページを設定するのに使います。例えば、ブログのホームページの上部に短文を表示させたいとしましょう。<tt>[[#The Main Page|is_home()]]</tt>を使うことによって、その作業量は軽減できます。
+
'''条件分岐タグ''' (Conditional Tag) は、テンプレートファイル内で表示される内容や、特定のページ内容を表示する条件を設定するのに使います。例えば、ブログのホームページの上部に短い文を表示させたいとしましょう。<tt>[[#The Main Page|is_home()]]</tt>を使えば、簡単に実行できます。
  
 これらのタグは[[Template Hierarchy]]と近い関係にあります。
+
これらのタグは[[テンプレート階層]]と深い関わりがあります。
  
==The Conditions For...==
+
'''注:''' 条件分岐タグが使えるのは WordPress の ''posts_selection'' [[プラグイン_API/アクションフック一覧#一般的リクエスト中に実行されるアクション|アクションフック]]の後のみです (''wp'' アクションフックはこれらの条件分岐を使える最初のものです)。テーマの function.php 本文内 (関数の外) では正しく動作しません。
  
 条件タグはその状況下であるかをチェックし、TRUE もしくは FALSE を返します。
+
'''しかし''' <tt>query</tt> オブジェクトへの参照があれば (例えば <tt>parse_query</tt> または <tt>pre_get_posts</tt> フック内から )、WP_Query 条件メソッドを使用できます(例: <code>$query->is_search()</code>)。
  
<!--All of the Conditional Tags test to see whether a certain condition is met, and then returns either TRUE or FALSE. '''The conditions under which various tags output TRUE is listed below'''. Those tags which can accept parameters are so noted.-->
+
<div id="The_Conditions_For_...">
 +
==条件の判定==
 +
</div>
  
=== The Main Page ===
+
条件分岐タグは、現在のページが指定した条件に合致するかどうかをチェックし、true もしくは false を返します。以下の条件分岐タグの説明では、true 値が返される場合の説明をしています。また、タグで引数が使える場合は追記してあります。
  
; <tt>is_home()</tt> : メインページ(ブログのホームページ)が表示されている場合
+
<div id="The_Blog_Page">
 +
=== ブログページ ===
 +
</div>
  
=== A Single Post Page ===
+
; <tt>[[関数リファレンス/is_front_page|is_front_page()]]</tt> と <tt>[[関数リファレンス/is_home|is_home()]]</tt> :
 +
ブログページ用の条件分岐タグはありません。<tt>is_home()</tt> と <tt>is_front_page()</tt> の両方を使ってこのページを検出する必要がありますが、これらの関数は間違って使われがちです。実際に、ユーザーがある固定ページをホームページとして定義し、別の固定ページでブログを表示するということもあります。この場合ブログページがホームページではないにも関わらず <tt>is_home()</tt> 関数で <tt>true</tt> を返します。以下はユーザーが定義できる設定の例です。
  
; <tt>is_single()</tt> : 個別記事のページが表示されている場合
+
* デフォルトホームページ (最新の投稿を含む)
; <tt>is_single('17')</tt> : ID 17の記事が表示されている場合
+
* 固定ホームページ、ブログページなし
; <tt>is_single('Beef Stew')</tt> : "Beef Stew"(ビーフシチュー)というタイトルの記事が表示されている場合
+
* 固定ホームページとブログページ
; <tt>is_single('beef-stew')</tt> : "beef-stew"(ビーフシチュー)という投稿スラッグの記事が表示されている場合
+
  
=== A PAGE Page ===
+
<tt>is_home()</tt> と <tt>is_front_page()</tt> を使う場合はバグを防ぐために正しい順序で表記し、すべてのユーザー設定をテストする必要があります。
 +
<pre>if ( is_front_page() && is_home() ) {
 +
// デフォルトホームページ
 +
} elseif ( is_front_page() ) {
 +
// 固定ペーシを使ったホームページ
 +
} elseif ( is_home() ) {
 +
// ブログページ
 +
} else {
 +
// それ以外
 +
}</pre>
  
 ここでいうページとは、WordPressにおける[[Pages|ページ]]であり、いわゆる「ページ」とは異なります。その詳説については、「[[Pages#用語について|用語について]]」をご覧ください。
+
<div id="The_Main_Page">
  
; <tt>is_page()</tt> : [[Pages|ページ]]が表示されている場合
+
=== メインページ ===
; <tt>is_page('42')</tt> : ID 42の[[Pages|ページ]]が表示されている場合
+
</div>
; <tt>is_page('About Me')</tt> : "About Me"というタイトルの[[Pages|ページ]]が表示されている場合
+
; <tt>is_page('about-me')</tt> : "about-me"という投稿スラッグの[[Pages|ページ]]が表示されている場合
+
  
 残念ながら、<tt>is_subpage()</tt>というタグは今のところありません。ですが、対応策はあります。
+
; <tt>[[関数リファレンス/is_home|is_home()]]</tt> : メインブログページが表示されている場合。これは、サイトにある時系列のブログコンテンツを表示するページです。もしあなたがフロントページに固定ページを設定していた場合(以下を参照)、[[Administration_Panels|Administration]] >  [[Administration_Panels#Reading|Settings]] > [[Settings_Reading_SubPanel|Reading]]であなたが「投稿ページ」として設定したページでのみ、trueになります。
  
; <tt>if(get_the_title($post->post_parent) != the_title(' ' , ' ',false)) { echo "This is a subpage";  }</tt> : 表示中のページがサブページであるかどうかを親ページが存在するかどうかで判定します。サブページではない場合、それは親ページであることを意味します。この例文の場合、"This is a subpage"とブラウザー上に表示されます。
+
<div id="The_Front_Page">
  
=== A Category Page ===
+
=== フロントページ ===
 +
</div>
  
; <tt>is_category()</tt> : 或るカテゴリーのアーカイヴページが表示されている場合
+
; <tt>[[関数リファレンス/is_front_page|is_front_page()]]</tt> : 投稿・[[Pages|固定ページ]]にかかわらず、サイトのフロントページが表示されている場合。
; <tt>is_category('6')</tt> : カテゴリーID 6のアーカイヴページが表示されている場合
+
: true を返すのは、[[Settings Reading SubPanel|表示設定]]の「トップページの表示」として
; <tt>is_category('Cheeses')</tt> : "Cheeses"というカテゴリーのアーカイヴページが表示されている場合
+
:* 「最新の投稿」を設定している場合には、メインブログページが表示されるとき
; <tt>is_category('cheeses')</tt> : "cheeses"というカテゴリースラッグのアーカイヴページが表示されている場合
+
:* 「固定ページ (以下を選択)」を設定している場合には、「フロントページ」として選択した[[Pages|固定ページ]]が表示されるとき
; <tt>in_category('5')</tt> : カテゴリーID 5のアーカイヴページが表示されている場合に'''TRUEを返します'''
+
  
<tt>[[#Any Archive Page|is_archive()]]</tt>[[Category Templates]]も参照してください。
+
<!--
 +
[[管理パネル]] > [[管理パネル#Settings|設定]] > [[Settings Reading SubPanel|表示設定]]画面:
 +
* トップページの表示
 +
** ○ 最新の投稿 ← このページ(メインブログページ)を表示するとき、is_home(), is_front_page が true
 +
** ○ 固定ページ
 +
*** フロントページ ←  このページ(サイトのトップページ)を表示するとき、is_front_page() が true
 +
*** 投稿ページ   ← このページ(ブログページ)を表示するとき、is_home() が true
 +
-->
  
=== An Author Page ===
+
<div id="The_Administration_Panels">
 +
=== 管理画面 ===
 +
</div>
  
; <tt>is_author()</tt> : ある著者のアーカイヴページが表示されている場合
+
; <tt>[[関数リファレンス/is_admin|is_admin()]]</tt>: ダッシュボードまたは管理画面が表示されている場合。
; <tt>is_author('1337')</tt> : ID 1337の著者のアーカイヴページを表示している場合
+
; <tt>is_author('Elite Hacker')</tt> : ニックネームが"Elite Hacker"のアーカイヴページを表示している場合
+
; <tt>is_author('elite-hacker')</tt> : When the archive page for the Author with Nicename "elite-hacker" is being displayed.
+
  
<tt>[[#Any Archive Page|is_archive()]]</tt>や[[Author Templates]]も併せてどうぞ。
+
''注''': '''wp-login.php''' ページは管理パネル内のページではない。このページが表示されているかを確認するには、<tt>[[グローバル変数#Admin_Globals|管理グローバル変数]]</tt> の '''$pagenow''' を使う。
  
=== A Date Page ===
+
; <tt>[[関数リファレンス/is_network_admin|is_network_admin()]]</tt>: ネットワークダッシュボードやマルチサイトのネットワーク管理パネルが表示されている時。
 +
'''注''':  '''wp-login.php''' は管理者ページではありません。このページが表示されているかを確認するには、<tt>[[Global_Variables#Admin_Globals|管理グローバル変数]]</tt>の '''$pagenow'''を使う。
  
; <tt>is_date()</tt> : あらゆる日付別のアーカイヴページが表示されている場合(例:月別、年別、日別、時間別)
+
<div id="The_Admin_Bar">
; <tt>is_year()</tt> : 年別のアーカイヴページが表示されている場合
+
; <tt>is_month()</tt> : 月別のアーカイヴページが表示されている場合
+
; <tt>is_day()</tt> : 日別のアーカイヴページが表示されている場合
+
; <tt>is_time()</tt> : 毎時別、毎分別、毎秒別のアーカイヴページが表示されている場合
+
  
<tt>[[#Any Archive Page|is_archive()]]</tt>もどうぞ。
+
=== 管理バー ===
 +
</div>
  
=== Any Archive Page ===
+
; <tt>[[関数リファレンス/is_admin_bar_showing|is_admin_bar_showing()]]</tt> : 管理バーが表示されている場合 <tt>true</tt> を返す。
  
; <tt>is_archive()</tt> : あらゆるタイプのアーカイヴページが表示されている場合
+
''注'' : 管理バー表示をコントロールするには [[関数リファレンス/show_admin_bar|show_admin_bar()]] / [[:en:Function_Reference/show_admin_bar|en]] を使う。この関数は ''plugins_loaded'' の後ですぐ呼び出すか、テーマの ''functions.php'' ファイルに含める。
  
=== A Search Result Page ===
+
<div id="A_Single_Post_Page">
  
; <tt>is_search()</tt> : 検索結果のページが表示されている場合
+
=== 個別投稿ページ ===
 +
</div>
  
=== A 404 Not Found Page ===
+
; <tt>[[関数リファレンス/is_single|is_single()]]</tt> : 個別投稿のページ(または添付ファイルページ・カスタム投稿タイプの個別ページ)が表示されている場合。固定ページには適用されない。
 +
; <tt>is_single( '17' )</tt> : ID 17の投稿が表示されている場合。
 +
; <tt>is_single( 'Irish Stew' )</tt> : "Irish Stew" というタイトルの投稿が表示されている場合。
 +
; <tt>is_single( 'beef-stew' )</tt> : "beef-stew" という投稿スラッグの投稿が表示されている場合。
 +
; <tt>is_single( array( 17, 'beef-stew', 'Irish Stew' ) )</tt> : ID が 17、投稿スラッグが "beef-stew"、またはタイトルが "Irish Stew" のいずれかにあてはまる投稿が表示されている場合。
 +
; <tt>is_single( array( 17, 19, 1, 11 ) )</tt> : シングルポストの''post IDが17か19か1か11かのどちらかの場合。
 +
; <tt>is_single( array( 'beef-stew', 'pea-soup', 'chili' ) )</tt> : シングルポストのpost_nameが"beef-stew"、"pea-soup" または"chili"のいずれかの場合
 +
; <tt>is_single( array( 'Beef Stew', 'Pea Soup', 'Chili' ) )</tt> : シングルポストはpost_titleが "Beef Stew"、"Pea Soup"または"Chili"のいずれかの場合
  
; <tt>is_404()</tt> : "HTTP 404: Not Found"エラーページが表示されている場合
+
: この関数は投稿 ID、投稿タイトル、または投稿名を区別しません。投稿 ID が「17」の投稿をリクエストした場合、タイトルや投稿スラッグが「17」の投稿が表示されることがあります。
  
=== A Paged Page ===
+
<div id="A_Sticky_Post">
  
; <tt>is_paged()</tt> : When the page being displayed is "paged".  This refers to an archive or the main page being split up over several pages.  This does ''not'' refer to a Post or [[Pages|Page]] whose content has been divided into pages using the <tt><!<nowiki></nowiki>--nextpage--></tt> [[Writing Posts#Here is a run-down of the quicktag functions:|QuickTag]].
+
=== 先頭固定表示の投稿 ===
 +
</div>
 +
; <tt>[[関数リファレンス/is_sticky|is_sticky()]]</tt> : 投稿編集ページで「この投稿を先頭に固定表示」のチェックボックスがついている投稿が表示されている場合。もし ID 変数が指定されていない場合、投稿 ID は [[The Loop|WordPress ループ]]の投稿のものになる。
 +
; <tt>is_sticky( '17' )</tt> : ID 17 の投稿が先頭固定表示の場合、真を返す。
  
=== A Syndication ===
+
<!--
 +
<div id="A_Post_Type">
 +
=== 投稿タイプ ===
 +
</div>
 +
; <tt>[[関数リファレンス/get_post_type|get_post_type()]]</tt> : 正確には条件分岐タグではありませんが、[[関数リファレンス/register_post_type|現在の投稿がどの投稿タイプに属しているか]]を(PHPの値として)返してくれます。
 +
; <tt> if( 'book' == get_post_type() ) ...</tt> : 現在の投稿が「book」という投稿タイプに属しているかを判定します。
 +
; <tt>[[関数リファレンス/is_singular|is_singular()]]</tt>: <tt>is_single、is_page、is_attachment</tt>のいずれかの条件を満たすときにtrueを返します。投稿タイプの判定にも使えます。
 +
; <tt>[[関数リファレンス/post_type_exists|post_type_exists()]]</tt> : この[[Conditional_Tags|条件分岐タグ]]は、引数に与えられた名称の投稿タイプが存在するかチェックします。これはブール関数であり、グローバル変数 $wp_post_types を使用して投稿タイプの存在をチェックします。つまり、もし投稿タイプが存在すればTRUEを、存在しなければFALSEを返します。投稿タイプは[[関数リファレンス/register_post_type|登録された投稿タイプ]]でなければなりません。
 +
-->
 +
<div id="A_Post_Type_is_Hierarchical">
 +
=== 階層を持つ投稿タイプ ===
 +
</div>
  
; <tt>is_feed()</tt> : When the site requested is a [[Introduction_to_Blogging#Syndication|Syndication]].  This tag is not typically used by users; it is used internally by WordPress and is available for Plugin Developers.
+
; <tt>[[関数リファレンス/is_post_type_hierarchical|is_post_type_hierarchical($post_type)]]</tt> : この[[Conditional_Tags|条件分岐タグ]]は、その投稿タイプが階層型かどうかチェックします。これはブール関数であり、TRUEかFALSEを返します(FALSEは、その投稿タイプが存在しないことを意味するかもしれません)。
  
=== A Trackback ===
+
最初にその投稿タイプが存在することをチェックします。そして投稿タイプのオブジェクトを取得し、最終的にそのオブジェクト内の階層型かどうかの値を返します。
  
; <tt>is_trackback()</tt> : フックの中にトラックバックの機構が組み込まれている場合
+
<div id="A_Post_Type_Archive">
 +
=== 投稿タイプアーカイブ ===
 +
</div>
  
:このタグは一般のユーザーの為のものでは無く、WordPress内部で使われるものであり、プラグイン開発の際に使用されます。
+
;<tt>[[関数リファレンス/is_post_type_archive|is_post_type_archive()]]</tt> : 現在のクエリが、引数に与えられた投稿タイプのアーカイブページのものかどうかチェックする。
 +
;<tt>is_post_type_archive( $post_type )</tt> : $post_type に一致する投稿タイプアーカイブページの場合に true を返す。
 +
;<tt>is_post_type_archive( array( 'foo', 'bar', 'baz' ) )</tt> : 投稿タイプアーカイブページが "foo"/"bar"/"baz" いずれかに一致する場合に true を返す。
  
==Working Examples==
+
投稿タイプアーカイブを有効にするには、[[関数リファレンス/register_post_type|その投稿タイプを登録する]]際に 'has_archive' => true を使う。
  
以下は条件タグの動作サンプルです。
+
<div id="A_Comments_Popup">
 +
=== コメントポップアップ ===
 +
</div>
 +
; <tt>[[関数リファレンス/is_comments_popup|is_comments_popup()]]</tt> : コメントポップアップウィンドウが表示されている場合。
  
===Single Post===
+
<div id="Any_Page_Containing_Posts">
 +
=== 投稿を含むページ ===
 +
</div>
 +
 
 +
; <tt>[[関数リファレンス/comments_open|comments_open()]]</tt>: [[The Loop|WordPress ループ]]内で処理中の投稿がコメント受信を受け付けている場合。
 +
; <tt>[[関数リファレンス/pings_open|pings_open()]]</tt>:  [[The Loop|WordPress ループ]]内で処理中の投稿がピン(ピンバックおよびトラックバック)を受け付けている場合。
 +
 
 +
<div id="A_PAGE_Page">
 +
=== WordPress ページ ===
 +
</div>
 +
 
 +
ここでいう「ページ」とは、WordPressにおける[[Pages|固定ページ]]のことで、いわゆる「Web ページ」とは異なります。つまり、''post_type'' が 'page' となっているもののことです。詳しくは、「[[Pages#用語について|用語について]]」をご覧ください。
 +
 
 +
; <tt>[[関数リファレンス/is_page|is_page()]]</tt> : [[Pages|固定ページ]]が表示されている場合。
 +
; <tt>is_page( '42' )</tt> : ID 42の[[Pages|固定ページ]]が表示されている場合。
 +
; <tt>is_page( 'About Me And Joe' )</tt> : "About Me And Joe"というタイトルの[[Pages|固定ページ]]が表示されている場合。
 +
; <tt>is_page( 'about-me' )</tt> : "about-me"という投稿スラッグの[[Pages|固定ページ]]が表示されている場合。
 +
; <tt>is_page( array( 42, 'about-me', 'About Me And Joe' ) )</tt> : ID が 42、投稿スラッグが "about-me"、またはタイトルが "About Me And Joe" のいずれかにあてはまる[[Pages|固定ページ]]が表示されている場合。
 +
; <tt>is_page( array( 42, 54, 6 ) )</tt> : ID が 42、54、または6のいずれかの[[Pages|固定ページ]]が表示されている場合。
 +
 
 +
他のスニペットについては [[関数リファレンス/is_page|is_page()]] を参照。
 +
 
 +
''注'': 固定ページがサブページかどうかをチェックする関数はありません。この問題を解決するには以下を参考にしてください。
 +
 
 +
<pre>if ( is_page() && $post->post_parent > 0 ) {
 +
    echo "これは子ページです";
 +
}</pre>
 +
 
 +
<div id="Is_a_Page_Template">
 +
==== ページテンプレート ====
 +
</div>
 +
この条件分岐タグを使うと、特定の[[Pages#ページテンプレート|ページテンプレート]]を使っているかどうかをチェックできます。
 +
 
 +
; <tt>[[関数リファレンス/is_page_template|is_page_template()]]</tt>
 +
: [[Pages#ページテンプレート|ページテンプレート]]が使われている場合。
 +
; <tt>is_page_template('about.php')</tt> : "about" という[[Pages#ページテンプレート|ページテンプレート]]が使われている場合。
 +
 
 +
''注'': ファイルがサブディレクトリにある場合はファイル名のみだけではなくパスも含める必要があります。例: <tt>page-templates/about.php</tt>
 +
 
 +
<div id="A_Category_Page">
 +
 
 +
=== カテゴリーページ ===
 +
</div>
 +
 
 +
; <tt>[[関数リファレンス/is_category|is_category()]]</tt> : ページが <tt>$category</tt> カテゴリーと関連付けられている場合。
 +
; <tt>is_category( '9' )</tt> : カテゴリーID 9のアーカイブページが表示されている場合。
 +
; <tt>is_category( 'Stinky Cheeses' )</tt> : "Stinky Cheeses"というカテゴリーのアーカイブページが表示されている場合。
 +
; <tt>is_category( 'blue-cheese' )</tt> : "blue-cheese"というカテゴリースラッグのアーカイブページが表示されている場合。
 +
; <tt>is_category( array( 9, 'blue-cheese', 'Stinky Cheeses' ) )</tt> : 投稿のカテゴリーが term_ID 9、スラッグが "blue-cheese" の場合、カテゴリー名が "Stinky Cheeses" のいずれかにあてはまる場合、真を返す。
 +
; <tt>'''in'''_category( '5' )</tt> : (注: '''in'''_category です。) 現在の投稿がカテゴリーID 5に'''属する'''場合に true を返します。 [[テンプレートタグ/in_category|詳細]]
 +
; <tt>in_category( array( 1,2,3 ) )</tt> : 現在の記事が、カテゴリID 1、2、3の'''いずれか'''に属している場合は true を返します。
 +
; <tt>! in_category( array( 4,5,6 ) )</tt> : 現在の記事が、カテゴリID 4、5、6の'''いずれにも属していない'''場合は true を返します。先頭に「!」が付くことに注目してください。
 +
 
 +
'''注意:''' テストの際にはスペリングをしっかりチェックしましょう。"is" と "in" では意味が大きく異なります。
 +
 
 +
<tt>[[#Any Archive Page|is_archive()]]</tt> と[[Category Templates|カテゴリーテンプレート]]も参照してください。
 +
 
 +
<div id="A_Tag_Page">
 +
 
 +
=== タグページ ===
 +
</div>
 +
 
 +
; <tt>[[関数リファレンス/is_tag|is_tag()]]</tt> : タグのアーカイブページが表示されている場合。
 +
; <tt>is_tag( 'mild' )</tt> : 'mild' というスラッグのついたタグのアーカイブページが表示されている場合。
 +
; <tt>is_tag( array( 'sharp', 'mild', 'extreme' ) )</tt> : 'sharp' または 'mild' または 'extreme' というスラッグのついたタグのアーカイブページが表示されている場合。
 +
; <tt>[[関数リファレンス/has_tag|has_tag()]]</tt> : タグのある投稿がループ内で表示されている場合。バージョン2.7以前ではループ内で使う必要がある。
 +
; <tt>has_tag( 'mild' )</tt> : 'mild' というタグのある投稿が表示されている場合。
 +
; <tt>has_tag( array( 'sharp', 'mild', 'extreme' ) )</tt> : 配列内のいずれかのタグのある投稿が表示されている場合。
 +
 
 +
<tt>[[#Any Archive Page|is_archive()]]</tt> と [[Tag Templates|タグテンプレート]]/[[:en:Tag Templates|en]] もあわせてお読みください。
 +
 
 +
<div id="A_Taxonomy_Page">
 +
=== タクソノミーページ (その他関連するもの) ===
 +
</div>
 +
 
 +
==== is_tax ====
 +
; <tt>[[関数リファレンス/is_tax|is_tax()]]</tt> : タクソノミーのアーカイブページが表示されている場合。
 +
; <tt>is_tax( 'flavor' )</tt> : 'flavor' というスラッグのついたタクソノミーのアーカイブページが表示されている場合。
 +
; <tt>is_tax( 'flavor', array( 'sharp', 'mild', 'extreme' ) )</tt> : 'sharp' または 'mild' または 'extreme' というスラッグのついた flavor タクソノミーのアーカイブページが表示されている場合。
 +
 
 +
<tt>[[#Any Archive Page|is_archive()]]</tt> もあわせてお読みください。
 +
 
 +
==== has_term ====
 +
 
 +
; <tt>[[関数リファレンス/has_term|has_term()]]</tt> : 現在のポストが指定の項目(term)を持つかどうかを確認します。最初のパラメータは空の文字列である必要があります。2番目のパラメータには、分類のスラッグ、または名前を指定します。
 +
; <tt>has_term( 'green', 'color' )</tt> : 現在の投稿が分類 'color' の項目 'green' をもつ場合。
 +
; <tt>has_term( array( 'green', 'orange', 'blue' ), 'color' )</tt> : 現在の投稿が配列内の任意の項目をもつ場合。
 +
 
 +
==== term_exists ====
 +
 
 +
; <tt>[[関数リファレンス/term_exists|term_exists( $term, $taxonomy, $parent )]]</tt> : 任意の分類の中に <tt>$term</tt> が存在すれば <tt>true</tt> を返す。<tt>$taxonomy</tt> が指定された場合、項目はその中に存在する必要がある。3番目のパラメータ <tt>$parent</tt> もまたオプションで、指定された場合、項目はこの親の子である必要があり、分類は階層型でなければならない。
 +
 
 +
==== is_taxonomy_hierarchical ====
 +
 
 +
; <tt>[[関数リファレンス/is_taxonomy_hierarchical|is_taxonomy_hierarchical( $taxonomy )]]</tt> : 分類 <tt>$taxonomy</tt> が階層型なら <tt>true</tt> を返す。階層型分類を宣言するには、[[関数リファレンス/register_taxonomy|register_taxonomy()]] を使用する際に <tt>'hierarchical' => true</tt> を使用してください。
 +
 
 +
==== taxonomy_exists ====
 +
 
 +
;<tt>[[関数リファレンス/taxonomy_exists|taxonomy_exists( $taxonomy )]]</tt> : あるタクソノミーが [[関数リファレンス/register_taxonomy|register_taxonomy()]] を使って登録されている場合 true を返す。
 +
 
 +
<tt>[[#Any Archive Page|is_archive()]]</tt> もあわせてお読みください。
 +
 
 +
<div id="An_Author_Page">
 +
=== 作成者ページ ===
 +
</div>
 +
 
 +
; <tt>[[関数リファレンス/is_author|is_author()]]</tt> : 作成者のアーカイブページが表示されている場合。
 +
; <tt>is_author( '4' )</tt> : ID 4 の作成者のアーカイブページを表示している場合。
 +
; <tt>is_author( 'Vivian' )</tt> : ニックネームが"Vivian"のアーカイブページを表示している場合。
 +
; <tt>is_author( 'john-jones' )</tt> : "john-jones" という「ナイスネーム」を持つ作成者のアーカイブページを表示している場合。
 +
; <tt>is_author( array( 4, 'john-jones' , 'Vivian' ) )</tt> : ID が4、ナイスネームが "john-jones"、またはニックネームが "Vivian" という作成者のアーカイブページを表示している場合。
 +
 
 +
<tt>[[#Any Archive Page|is_archive()]]</tt> や[[Author Templates|作成者テンプレート]]/[[:en:Author Templates|en]] もあわせてお読みください。
 +
 
 +
<div id="A_Multi-author_Site">
 +
=== 作成者ページ ===
 +
</div>
 +
 
 +
; <tt>[[関数リファレンス/is_multi_author|is_multi_author()]]</tt> : サイト上に一人以上投稿を公開しているユーザーがいる場合。[[Version 3.2|バージョン 3.2]] から導入された。
 +
 
 +
<tt>[[#Any Archive Page|is_archive()]]</tt> や[[Author Templates|作成者テンプレート]]/[[:en:Author Templates|en]] もあわせてお読みください。
 +
 
 +
<div id="A_Date_Page">
 +
=== 日付別ページ ===
 +
</div>
 +
 
 +
; <tt>[[関数リファレンス/is_date|is_date()]] </tt> : 日付別のアーカイブページのいずれかが表示されている場合。(例:月別、年別、日別、時間別)
 +
; <tt>[[関数リファレンス/is_year|is_year()]] / [[:en:Function_Reference/is_year|en]]</tt> : 年別のアーカイブページが表示されている場合。
 +
; <tt>[[関数リファレンス/is_month|is_month()]] / [[:en:Function_Reference/is_month|en]]</tt> : 月別のアーカイブページが表示されている場合。
 +
; <tt>[[関数リファレンス/is_time|is_time()]] / [[:en:Function_Reference/is_time|en]]</tt> : 毎時別、毎分別、毎秒別のアーカイブページが表示されている場合。
 +
; <tt>[[関数リファレンス/is_new_day|is_new_day()]] / [[:en:Function_Reference/is_new_day|en]]</tt> : 投稿の日付が新しい日の場合。ループ内で使う。
 +
 
 +
<tt>[[#Any Archive Page|is_archive()]]</tt> もあわせてお読みください。
 +
 
 +
<div id="Any_Archive_Page">
 +
 
 +
=== アーカイブページ ===
 +
</div>
 +
 
 +
; <tt>[[関数リファレンス/is_archive|is_archive()]]</tt> : 各アーカイブページが表示されている場合。アーカイブページには、カテゴリー、タグ、その他のタクソノミー項目、カスタム投稿タイプアーカイブ、作成者、日付別のものがあります。
 +
 
 +
<div id="A_Search_Result_Page">
 +
=== 検索結果ページ ===
 +
</div>
 +
 
 +
; <tt>[[関数リファレンス/is_search|is_search()]]</tt> : 検索結果のページが表示されている場合。
 +
 
 +
<div id="A_404_Not_Found_Page">
 +
=== 404 Not Found ページ ===
 +
</div>
 +
 
 +
; <tt>[[関数リファレンス/is_404|is_404()]]</tt> : "HTTP 404: Not Found"エラーページが表示されている場合。
 +
 
 +
<div id="A_Paged_Page">
 +
=== 複数にわたるページ ===
 +
</div>
 +
 
 +
; <tt>[[関数リファレンス/is_paged|is_paged()]]</tt> : 表示中のページが複数のページにわたる場合。これは例えばアーカイブページやメインページに表示する投稿数よりも多い投稿があり、複数ページに分かれているときを指し、2ページ目以降のときに true を返します。ただし、1つの投稿や[[Pages|固定ページ]]の本文が <tt><nowiki><!--nextpage--></nowiki></tt> [[Writing Posts#Visual Versus HTML Editor|クイックタグ]]で複数ページに分けられている場合は当てはまりません。投稿または固定ページが <tt><!<nowiki></nowiki>--nextpage--></tt> クイックタグを使って分割されているかどうか調べるには、[[関数リファレンス/is_page#Testing_for_paginated_Pages|ページ分けされている固定ページであるか]] をご覧ください。
 +
 
 +
<div id="An_Attachment">
 +
=== 添付ファイルページ ===
 +
</div>
 +
 
 +
; <tt>[[関数リファレンス/is_attachment|is_attachment()]]</tt> : 投稿または[[Pages|固定ページ]]の添付ファイルが表示されている場合。添付ファイルは、投稿画面のメディアアップロード機能を使ってアップロードした画像などのファイルの事で、テンプレートを使って独自のページ内に表示できます。
 +
 
 +
詳しくは [[Using Image and File Attachments|画像や添付ファイルの使い方]]/[[:en:Using Image and File Attachments|en]] もご覧ください。
 +
 
 +
<div id="Attachement_Is_Image">
 +
=== 画像の添付ファイル ===
 +
</div>
 +
; <tt>[[関数リファレンス/wp_attachment_is_image|wp_attachment_is_image( $post_id )]]</tt> : 投稿 ID が <tt>$post_id</tt> と一致する投稿の添付ファイルが画像の場合 <tt>true</tt> を返す。許可されている ''Mime'' 形式および拡張子は以下のとおり: .jpg, .jpeg, .gif, et .png.
 +
 
 +
<div id="A_Local_Attachment">
 +
=== ローカル添付ファイル ===
 +
</div>
 +
 
 +
; <tt>[[関数リファレンス/is_local_attachment|is_local_attachment( $url )]] / [[:en:Function_Reference/is_local_attachment|en]]</tt> : <tt>$url</tt> に渡されたリンクが、このサイトからの実際の添付ファイルであれば <tt>true</tt> を返す。
 +
 
 +
<div id="A_Single_Page.2C_Single_Post_or_Attachment">
 +
 
 +
=== シングルページ (固定ページ、個別投稿ページ、添付ファイルページ) ===
 +
</div>
 +
 
 +
; <tt>[[関数リファレンス/is_singular|is_singular()]]</tt> : <tt>is_single()</tt>、<tt>is_page()</tt> 、<tt>is_attachment()</tt> のいずれかが真である場合に <tt>true</tt> を返す。
 +
; <tt>is_singular( 'foo' )</tt> : 'foo' という[[投稿タイプ|カスタム投稿タイプ]]の場合に <tt>true</tt> を返す。
 +
; <tt>is_singular( array( 'foo', 'bar', 'baz' ) )</tt> : 'foo'/'bar'/'baz' という[[投稿タイプ|カスタム投稿タイプ]]の投稿を表示している場合に <tt>true</tt> を返す。
 +
 
 +
[[カスタム投稿タイプ]]も参照。
 +
 
 +
<div id="Post_Type_Exists">
 +
=== 登録済み投稿タイプ ===
 +
</div>
 +
 
 +
; <tt>[[関数リファレンス/post_type_exists|post_type_exists( $post_type )]]</tt> : 指定した <tt>$post_type</tt> が [[関数リファレンス/register_post_type|register_post_type()]] を使ってこのサイトに登録されている場合に <tt>true</tt> を返す。
 +
 
 +
<div id="Is_Main_Query">
 +
=== メインクエリ ===
 +
</div>
  
以下は<tt>is_single()</tt>によって特定の情報を個別記事のページでのみ表示させる為の例文です。
+
; <tt>[[関数リファレンス/is_main_query|is_main_query()]]</tt>: 現在のクエリ (ループ内など) が「メイン」クエリの場合に <tt>true</tt> を返す。
  
 +
'''フィルターフック the_content を使った例'''
 
<pre>
 
<pre>
if (is_single())
+
add_action( 'the_content', 'baw_add_social_buttons' );
{
+
function baw_add_social_buttons( $content ) {
    echo 'This is just one of many fabulous entries in the ' . single_cat_title() . ' category!';
+
    if ( ! is_admin() && is_main_query() ) {
 +
        return $content . function_from_a_social_plugin();
 +
    }
 +
    return $content;
 
}
 
}
 
</pre>
 
</pre>
  
===Date-Based Differences===
+
WordPress が各投稿のコンテンツをループ内または個別投稿ページで表示しようとした際に、それがメインクエリ内であり管理画面ではない場合、(例えば) ソーシャルボタンを表示する。
  
以下の例は、日付別ページへのアクセスが行われたときに、年別に色分けして表示させます。
+
'''アクションフック pre_get_posts を使った例'''
 +
<pre>
 +
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>
 +
<tt>pre_get_posts</tt> を使って直接 <tt>is_main_query</tt> を呼び出すことはできないため、引数として <tt>$query</tt> を使う。
  
 +
<div id="A_New_Day">
 +
=== 新しい日付 ===
 +
</div>
 +
 +
; <tt>[[関数リファレンス/is_new_day|is_new_day()]]  [[:en:Function_Reference/is_new_day| /en]]</tt> : 新しい日付の場合 <tt>true</tt> を返す。
 +
 +
<div id="A_Syndication">
 +
 +
=== フィード ===
 +
</div>
 +
 +
; <tt>[[関数リファレンス/is_feed|is_feed()]] /[[:en:Function_Reference/is_feed|en]]</tt> : [[ブログ入門#Syndication|Syndication]](フィード)がリクエストされた場合。
 +
:このタグは通常、一般のユーザーがページを表示しているときに条件を判断するためではなく、プラグイン開発の際に WordPress 内部で使われます。
 +
 +
<div id="A_Trackback">
 +
 +
=== トラックバック ===
 +
</div>
 +
 +
; <tt>[[関数リファレンス/is_trackback|is_trackback()]] /[[:en:Function_Reference/is_trackback|en]]</tt> : フックの中にトラックバックの機構が組み込まれている場合。
 +
:このタグは通常、一般のユーザーがページを表示しているときに条件を判断するためではなく、プラグイン開発の際に WordPress 内部で使われます。
 +
 +
<div id="A_Preview">
 +
 +
=== プレビュー ===
 +
</div>
 +
 +
; <tt>[[関数リファレンス/is_preview|is_preview()]] /[[:en:Function_Reference/is_preview|en]]</tt> : 未公開モードで固定リンクページを表示している場合。
 +
 +
<div id="Has_An_Excerpt">
 +
 +
=== 抜粋あり ===
 +
</div>
 +
; <tt>[[関数リファレンス/has_excerpt|has_excerpt()]]</tt> : 投稿に (手動で書かれた) 抜粋がある場合。
 +
; <tt>has_excerpt( '42' )</tt> : 投稿 ID 42 の投稿に抜粋がある場合。
 +
 +
<div id="Has_A_Nav_Menu_Assigned">
 +
=== ナビゲーションメニュー割り当てあり ===
 +
</div>
 +
; <tt>[[関数リファレンス/has_nav_menu|has_nav_menu()]] /[[:en:Function_Reference/has_nav_menu|en]]
 +
</tt> : 登録済みのナビゲーションメニューロケーションにメニューが割り当てられている場合に <tt>true</tt> を返す。
 +
 +
[[関数リファレンス/register_nav_menu|register_nav_menu()]] も参照。
 +
 +
<div id="Inside_The_Loop">
 +
 +
=== ループ内 ===
 +
</div>
 +
; <tt>[[関数リファレンス/in_the_loop|in_the_loop()]]</tt> : ループ内かどうかをチェックする。ループ内にあった場合真を返すので、プラグイン作者に便利。
 +
 +
<div id="Is_Dynamic_SideBar">
 +
=== ダイナミックサイドバー対応 ===
 +
</div>
 +
; <tt>[[関数リファレンス/is_dynamic_sidebar|is_dynamic_sidebar()]]</tt> : テーマがダイナミックサイドバーに対応している場合 <tt>true</tt> を返す。
 +
 +
<div id="Is_Sidebar_Active">
 +
=== サイドバー使用中 ===
 +
</div>
 +
; <tt>[[関数リファレンス/is_active_sidebar|is_active_sidebar()]]</tt> : 指定したサイドバーが使用中の場合、''true'' を返す。サイドバー名、ID を指定できる。
 +
 +
''注'': サイドバーのコンテンツを表示するには [[関数リファレンス/dynamic_sidebar|dynamic_sidebar( $sidebar )]] を使う。
 +
 +
<div id="Is_Widget_Active">
 +
=== ウィジェット使用中 ===
 +
</div>
 +
; <tt>[[関数リファレンス/is_active_widget|is_active_widget( $widget_callback, $widget_id )]]</tt> : <tt>$widget_callback</tt> というコールバックのウィジェットまたは <tt>ID</tt> が <tt>$widget_id</tt> フロントエンドに表示される場合に <tt>true</tt> を返す。
 +
 +
''注'' : 有効化するには、この関数をウィジェットの初期化後、すなわち、アクション 'init' またはその後で実行する必要がある。[[Plugin_API/Action_Reference|アクションフック一覧]]参照。
 +
 +
<div id="Is_Blog_Installed">
 +
=== ブログインストール済み ===
 +
</div>
 +
; <tt>[[関数リファレンス/is_blog_installed|is_blog_installed()]] /[[:en:Function_Reference/is_blog_installed|en]]</tt> : 現在のブログが適切にインストールされている場合 <tt>true</tt> を返す。
 +
 +
''注'': 最初にキャッシュが確認される。キャッシュ値を保存するキャッシュプラグインを有効化している場合、この関数は動作する。デフォルトの WordPress キャッシュを使用していて、データベースが停止した場合、問題が発生するかもしれない。
 +
 +
<div id="Right_To_Left_Reading">
 +
 +
=== RTL 読み ===
 +
</div>
 +
; <tt>[[関数リファレンス/is_rtl|is_rtl()]]</tt> : 現在のロケールが右から左に読まれるものの場合 <tt>true</tt> を返す。
 +
 +
'''例'''
 
<pre>
 
<pre>
&lt;?php
+
if ( is_rtl() ) {
// this starts The Loop
+
  wp_enqueue_style( 'style-rtl',  plugins_url( '/css/style-rtl.css', __FILE__ ) );
if ( have_posts() ) : while ( have_posts() ) : the_post(); ?&gt;
+
  wp_enqueue_script( 'script-rtl', plugins_url( '/js/script-rtl.js', __FILE__ ) );
&lt;h2 id="post-&lt;?php the_ID(); ?&gt;"&gt;
+
}
&lt;a href="&lt;?php the_permalink() ?&gt;" rel="bookmark" title="Permanent Link to &lt;?php the_title(); ?&gt;"&gt;
+
</pre>
&lt;?php the_title(); ?&gt;&lt;/a&gt;&lt;/h2&gt;
+
&lt;small&gt;&lt;?php the_time('F jS, Y') ?&gt; &lt;!-- by &lt;?php the_author() ?&gt; --&gt;&lt;/small&gt;
+
  
&lt;?php
+
<div id="Part_of_a_network">
// are we showing a date-based archive?
+
=== ネットワークの一部(マルチサイト) ===
if (is_date())
+
</div>
{
+
; <tt>[[関数リファレンス/is_multisite|is_multisite()]] /[[:en:Function_Reference/is_multisite|en]]</tt> : 現在のサイトがマルチサイトインストールの一部かどうかチェックする。
     if (date('Y') != get_the_date('Y'))
+
 
    {
+
<div id="Main_Site_.28Multisite.29">
           // this post was written in a previous year
+
 
          // so let's style the content using the "oldentry" class
+
=== メインサイト(マルチサイト) ===
           echo '&lt;div class="oldentry"&gt;';
+
</div>
 +
; <tt>[[関数リファレンス/is_main_site|is_main_site()]] /[[:en:Function_Reference/is_main_site|en]]</tt> : サイトがネットワークのメインサイトかどうかチェックする。
 +
 
 +
<div id="Admin_of_a_Network _Multisite">
 +
 
 +
=== ネットワークの管理者(マルチサイト) ===
 +
</div>
 +
; <tt>[[関数リファレンス/is_super_admin|is_super_admin()]]</tt> : ユーザーがネットワークの特権管理者かどうかをチェックする。
 +
 
 +
<div id="Is_User_Logged_in">
 +
=== ユーザーログイン済み ===
 +
</div>
 +
 
 +
; <tt>[[関数リファレンス/is_user_logged_in|is_user_logged_in()]]</tt> : 権限グループに関わらず、ユーザーの誰かがログイン中の場合 <tt>true</tt> を返す。
 +
 
 +
<div id="Email_Exists">
 +
=== 既存メール ===
 +
</div>
 +
; <tt>[[関数リファレンス/email_exists|email_exists( $email )]]</tt> : 指定されたメールアドレス <tt>$email</tt> がユーザー名として登録されているかどうかを確認する。登録されている場合はユーザーの <tt>ID</tt> を返し、存在しない場合 <tt>false</tt> を返す。
 +
 
 +
<div id="Username_Exists">
 +
=== 既存ユーザー名 ===
 +
</div>
 +
 
 +
; <tt>[[関数リファレンス/username_exists|username_exists( $username )]] /[[:en:Function_Reference/username_exists|en]]</tt> : 指定されたユーザー名 <tt>$username</tt> がユーザー名として登録されているかどうかを確認する。登録されている場合はユーザーの <tt>ID</tt> を返し、存在しない場合 <tt>false</tt> を返す。
 +
 
 +
<div id="An_Active_Plugin">
 +
 
 +
=== 有効化済みプラグイン ===
 +
</div>
 +
; <tt>[[関数リファレンス/is_plugin_active|is_plugin_active( $path )]]</tt> : プラグインが有効化されているかチェックする。
 +
; <tt>is_plugin_active( 'akismet/akismet.php' )</tt> : ''Akismet'' が有効化されているかチェックする。
 +
; <tt>[[関数リファレンス/is_plugin_inactive|is_plugin_inactive( $path )]] /[[:en:Function_Reference/is_plugin_inactive|en]]</tt> : プラグインが無効化されているかチェックする。<tt>! is_plugin_active( $path )</tt> と同じ。
 +
; <tt>[[関数リファレンス/is_plugin_active_for_network|is_plugin_active_for_network( $path )]] /[[:en:Function_Reference/is_plugin_active_for_network|en]]</tt> : マルチサイト環境でのネットワークで有効化と同じ
 +
; <tt>[[関数リファレンス/is_plugin_page|is_plugin_page()]] /[[:en:Function_Reference/is_plugin_page|en]]</tt> : ロードされたページが管理画面のプラグインページであれば <tt>true</tt> を返す。'''この関数は WordPress 3.1 から非推奨です。代替はありません。'''
 +
 
 +
<div id="A_Child_Theme">
 +
 
 +
=== 子テーマ ===
 +
</div>
 +
; <tt>[[関数リファレンス/is_child_theme|is_child_theme()]] /[[:en:Function_Reference/is_child_theme|en]]</tt> : 子テーマが使われているかどうかチェックする。
 +
 
 +
<div id="Theme_supports_a_feature">
 +
 
 +
=== 機能対応のテーマ ===
 +
</div>
 +
; <tt>[[関数リファレンス/current_theme_supports|current_theme_supports()]] /[[:en:Function_Reference/current_theme_supports|en]]</tt> : テーマに機能が存在するかチェックする。
 +
; <tt>current_theme_support( 'post-thumbnails' )</tt> : 現在のテーマが [[Post_Thumbnails|アイキャッチ画像]] をサポートすれば <tt>true</tt> を返す。テーマに機能を追加するには [[関数リファレンス/add_theme_support|add_theme_support()]] を使用する。
 +
 
 +
<div id="Has_Post_Thumbnail">
 +
 
 +
=== アイキャッチ画像あり ===
 +
</div>
 +
; <tt>[[関数リファレンス/has_post_thumbnail|has_post_thumbnail( $post_id )]]</tt> : <tt>ID</tt> が <tt>$post_id</tt> の投稿がアイキャッチ画像を含めば <tt>true</tt> を返す。テーマはアイキャッチ画像をサポートする必要がある。[[#機能対応のテーマ|機能対応のテーマ]] 参照。
 +
 
 +
<div id="Script_Is_In_use">
 +
=== スクリプト使用中 ===
 +
</div>
 +
; <tt>[[関数リファレンス/wp_script_is|wp_script_is( $handle, $list )]] /[[:en:Function_Reference/wp_script_is|en]]</tt> : ''handle'' が <tt>$handle</tt> のスクリプトが <tt>$list</tt> で指定された 'registered'、'enqueue/queue'、'done'、'to_do' であれば <tt>true</tt> を返す。
 +
 
 +
'''用例'''
 +
<pre>
 +
    $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' );
 +
      }
 +
</pre>
 +
スクリプト 'fluidVids.js' が enqueue されているかどうか確認します。もし enqueue されていなければ、ファイルは登録され、enqueue される。
 +
 
 +
<div id="Is Previewed in the Customizer">
 +
=== カスタマイザーでプレビュー中===
 +
</div>
 +
 
 +
; <tt>[[関数リファレンス/is_customize_preview|is_customize_preview()]] /[[:en:Function_Reference/is_customize_preview|en]]</tt> : [[Theme_Customization_API|Customizer]]内でサイトのプレビュー中なら<tt>true</tt>、それ以外なら<tt>false</tt>を返す。
 +
 
 +
 
 +
<div id="Working_Examples">
 +
== 動作サンプル ==
 +
</div>
 +
 
 +
以下は条件分岐タグの動作サンプルです。
 +
 
 +
<div id="Single_Post">
 +
=== 個別投稿 ===
 +
</div>
 +
 
 +
以下は<tt>is_single()</tt>によって特定の情報を個別投稿のページでのみ表示させるための例文です。
 +
 
 +
<pre>
 +
if ( is_single() ) {
 +
  echo 'この投稿は' . get_the_title() . 'カテゴリーに属しています';
 +
}
 +
</pre>
 +
 
 +
このカスタム関数を子テーマの functions.php ファイルに追加し、必要に応じて条件分岐タグを変更してください。
 +
 
 +
<pre>
 +
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>';
 +
    }
 +
}
 +
</pre>
 +
 
 +
以下のようにも使えます。
 +
 
 +
<pre>
 +
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>';
 +
    }
 +
}
 +
</pre>
 +
 
 +
ループ内で条件分岐タグを使用する別の例。index.php 内で、個別の投稿を表示するか、ホームページを表示する場合にコンテンツを表示し、それ以外では抜粋を表示する。
 +
 
 +
<pre>
 +
if ( is_home() || is_single() ) {
 +
  the_content();
 +
}
 +
else {
 +
  the_excerpt();
 +
}
 +
</pre>
 +
 
 +
ホームページでない場所では、コードまたは要素を表示する必要がある場合。
 +
 
 +
<pre>
 +
<?php if ( ! is_home() ) {?>
 +
ここにマークアップを挿入 ...
 +
<?php } ?>
 +
</pre>
 +
 
 +
<div id="Check_for_Multiple_Conditionals">
 +
===複数の条件をチェックする===
 +
</div>
 +
 
 +
[http://www.php.net/manual/ja/language.operators.comparison.php PHP 演算子]を使って、ひとつの宣言内で複数の条件をチェックできます。
 +
 
 +
<pre>
 +
// 2つの条件をチェック
 +
 
 +
if ( is_single() || is_page() ) ) {
 +
    // 個別の投稿または固定ページであれば、何かを行う
 +
}
 +
 
 +
if ( is_archive() && ! is_category( 'nachos' ) ) {
 +
    // カテゴリー「nachos」を除く任意のカテゴリーアーカイブページであれば、何かを行う
 +
}
 +
</pre>
 +
 
 +
<pre>
 +
// 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 アーカイブならば、何かを行う
 +
}
 +
</pre>
 +
 
 +
 
 +
<div id="Date-Based_Differences">
 +
===日付別の表示===
 +
</div>
 +
 
 +
以下の例は、日付別ページへのアクセスが行われたときに、年別に色分けして表示させます。
 +
 
 +
<pre><nowiki>
 +
<?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 {
 
     } else {
           echo '&lt;div class="entry"&gt;';
+
           echo '<div class="entry">';
 
     }
 
     }
 
} else {
 
} else {
     echo '&lt;div class="entry"&gt;';
+
     echo '<div class="entry">';
 
}
 
}
the_content('Read the rest of this entry &raquo;');  
+
the_content( '続きを読む &raquo;' );
?&gt;
+
?>
&lt;/div&gt;
+
</div>
</pre>
+
</nowiki></pre>
  
===Variable Sidebar Content===
+
<div id="Variable_Sidebar_Content">
 +
=== サイドバーの内容をページによって変更する ===
 +
</div>
  
以下の例は、アクセス中のページによってサイドバーに表示させる内容を変更させます。
+
以下の例では、閲覧中のページによってサイドバーに表示させる内容を変更します。
  
<pre>
+
<!--(注)下記コード内の [[テンプレートタグ/wp_list_cats|wp_list_cats]] は廃止予定です。替わりに[[テンプレートタグ/wp_list_categories|wp_list_categories]] をお使いください。-->
<!-- begin sidebar -->
+
<pre><nowiki>
 +
<!-- サイドバー開始 -->
 
<div id="sidebar">
 
<div id="sidebar">
 
<?php
 
<?php
// let's generate info appropriate to the page being displayed
+
// 表示中のページに合わせたサイドバーコンテンツを生成
if (is_home()) {
+
if ( is_home() ) {
        // we're on the home page, so let's show a list of all top-level categories
+
// ホームページを表示している際、トップレベルカテゴリーの一覧を表示
        echo "<ul>";
+
echo "<ul>";
        wp_list_cats('optionall=0&sort_column=name&list=1&children=0');
+
wp_list_categories('optionall=0&sort_column=name&list=1&children=0');
        echo "</ul>";
+
echo "</ul>";
} elseif (is_category()) {
+
} elseif ( is_category() ) {
        // we're looking at a single category view, so let's show _all_ the categories
+
// カテゴリーアーカイブページを表示している際、そのカテゴリー内のサブカテゴリーを含む一覧を表示
        echo "<ul>";
+
echo "<ul>";
        wp_list_cats('optionall=1&sort_column=name&list=1&children=1&hierarchical=1');
+
wp_list_categories('optionall=1&sort_column=name&list=1&children=1&hierarchical=1');
        echo "</ul>";
+
echo "</ul>";
} elseif (is_single()) {
+
elseif ( is_single() ) {
        // we're looking at a single page, so let's not show anything in the sidebar
+
// 投稿の固定リンクページを表示している際は何も表示させない
} elseif (is_page()) {
+
} elseif ( is_page() ) {
        // we're looking at a static page.  Which one?
+
// 固定ページを表示しています。どのページ?
        if (is_page('About')) {
+
if ( is_page( '管理人について' ) ) {
            // our about page.
+
// 「管理人について」ページ
            echo "<p>This is my about page!</p>";
+
echo "<p>当ブログの管理人についての説明ページ。</p>";
        } elseif (is_page('Colophon')) {
+
} elseif ( is_page( 'ブログについて' ) ) {
            echo "<p>This is my colophon page, running on WordPress " . bloginfo('version') . "</p>";
+
echo "<p>当ブログについての説明ページ。</p>";
        } else {
+
} else {
              // catch-all for other pages
+
// その他の固定ページで表示させたいものがあればここに記入
              echo "<p>Vote for Pedro!</p>";
+
}
        }
+
 
} else {
 
} else {
        // catch-all for everything else (archives, searches, 404s, etc)
+
// その他のページ(アーカイブページ、検索、404など)で表示させたいものがあればここに記入
        echo "<p>Pedro offers you his protection.</p>";
+
} // 以上で終わりです!
} // That's all, folks!
+
 
?>
 
?>
<form id="searchform" method="get" action="<?php echo $_SERVER['PHP_SELF']; ?>">
+
<form id="searchform" method="get" action="<?php echo esc_url( $_SERVER['PHP_SELF'] ); ?>">
 
<div>
 
<div>
 
<input type="text" name="s" id="s" size="15" />
 
<input type="text" name="s" id="s" size="15" />
<input type="submit" value="<?php _e('Search'); ?>" />
+
<input type="submit" value="<?php _e( 'Search' ); ?>" />
 
</div>
 
</div>
 
</form>
 
</form>
185行目: 714行目:
 
</div>
 
</div>
 
<!-- end sidebar -->
 
<!-- end sidebar -->
</pre>
+
</nowiki></pre>
  
===Helpful 404 page===
+
<div id="Helpful_404_page">
  
来訪者にとって404エラーページは不快で役立たずなものでしか在りません。WordPressでは、404ページをもっと役に立つページにすることが出来ます。例えば、ユーザーが存在しないページをクリックした時にメールで通知する方法です。これを使うときには、'''メールアドレスの設定'''を忘れずに行ってください。
+
=== 分かりやすい 404 ページ ===
 +
</div>
 +
「[[Creating an Error 404 Page|404エラーページの作成]]」という記事の「[[Creating an Error 404 Page#サーバーが 404 ページを見つけるのを助ける|サーバーが 404 ページを見つけるのを助ける]]」というセクションに、PHP の条件分岐関数 <code>isset()</code> を使う例が書かれています。
 +
 
 +
 
 +
<div id="Dynamic_Menu_Highlighting">
 +
 
 +
=== ダイナミックメニューハイライト ===
 +
</div>
 +
 
 +
[[Dynamic Menu Highlighting|ダイナミックハイライト]]とは、条件分岐タグを使用して、メニュー内の現在アクセスしているページを際立たせる方法です。
 +
 
 +
<div id="In_a_theme.27s_footer.php_file">
 +
===テーマの footer.php ファイル内===
 +
</div>
 +
sidebar.php などの他のテンプレートファイルによってクエリが実行された場合、元の条件分岐タグは破損してしまいます。例えば、header.php では条件分岐タグが適切に機能するのに、footer.php では正しく機能しないトラブルがよくあります。これを解決するにはフッターで条件分岐タグを使う前に ''wp_reset_query'' を実行します:
  
 
<pre>
 
<pre>
<p>You
 
 
<?php
 
<?php
#some variables for the script to use
+
wp_reset_query();
#if you have some reason to change these, do.  but wordpress can handle it
+
if ( is_page( '2' ) ) {
$adminemail = get_bloginfo('admin_email'); #the administrator email address, according to wordpress
+
echo 'ページ 2 です。';
$website = get_bloginfo('url'); #gets your blog's url from wordpress
+
}
$websitename = get_bloginfo('name'); #sets the blog's name, according to wordpress
+
?>
 +
</pre>
  
  if (!isset($_SERVER['HTTP_REFERER'])) {
+
このようなトラブルを無くすために、別の場所(テンプレートファイルやプラグイン)でクエリを実行した場合は、必要な処理を終えた後に必ず ''wp_reset_query'' を実行するようにしましょう。
    #politely blames the user for all the problems they caused
+
 
        echo "tried going to "; #starts assembling an output paragraph
+
<pre>
$casemessage = "All is not lost!";
+
<?php
   } elseif (isset($_SERVER['HTTP_REFERER'])) {
+
query_posts('posts_per_page=5&cat=123');
     #this will help the user find what they want, and email me of a bad link
+
if( have_posts() ) :
echo "clicked a link to"; #now the message says You clicked a link to...
+
   while( have_posts() ) :
        #setup a message to be sent to me
+
     the_posts();
$failuremess = "A user tried to go to $website"
+
    /* 投稿を出力するなどの処理... */
        .$_SERVER['REQUEST_URI']." and received a 404 (page not found) error. ";
+
  endwhile;
$failuremess .= "It wasn't their fault, so try fixing it.
+
else :
        They came from ".$_SERVER['HTTP_REFERER'];
+
   /* 該当する投稿がない場合、何もしない */
mail($adminemail, "Bad Link To ".$_SERVER['REQUEST_URI'],
+
endif;
        $failuremess, "From: $websitename <noreply@$website>"); #email you about problem
+
wp_reset_query();
$casemessage = "An administrator has been emailed
+
?>
        about this problem, too.";#set a friendly message
+
   }
+
  echo " ".$website.$_SERVER['REQUEST_URI']; ?>
+
and it doesn't exist. <?php echo $casemessage; ?>  You can click back
+
and try again or search for what you're looking for:
+
  <?php include(TEMPLATEPATH . "/searchform.php"); ?>
+
</p>
+
 
</pre>
 
</pre>
  
===Dynamic Menu Highlighting===
+
<div id="Conditional_Tags_Index">
 +
== 条件分岐タグ インデックス ==
 +
</div>
  
[[Dynamic Menu Highlighting|ダイナミックハイライト]]とは、条件タグを使用して、メニュー内の現在アクセスしているページを際立たせる方法です。
+
{| cellspacing="10" width="100%"
 +
|- style="vertical-align:top;"
 +
| style="width:100%" |
 +
 
 +
{| class="widefat"
 +
|- style="background:#464646; color:#d7d7d7;"
 +
! '''アルファベット順一覧'''
 +
|-
 +
|
 +
* [[#Any_Page_Containing_Posts|comments_open]]
 +
* [[#A_Tag_Page|has_tag]]
 +
* [[#A_Category_Page|in_category]]
 +
* [[#A_Taxonomy_Page|has_term]]
 +
* [[#A_404_Not_Found_Page|is_404]]
 +
* [[#The_Administration_Panels|is_admin]]
 +
* [[#Any_Archive_Page|is_archive]]
 +
* [[#An_Attachment|is_attachment]]
 +
* [[#An_Author_Page|is_author]]
 +
* [[#A_Category_Page|is_category]]
 +
* [[#A_Child_Theme|is_child_theme]]
 +
* [[#A_Comments_Popup|is_comments_popup]]
 +
* [[#Is_Previewed_in_the_Customizer|is_customize_preview]]
 +
* [[#A_Date_Page|is_date]]
 +
* [[#A_Date_Page|is_day]]
 +
* [[#A_Syndication|is_feed]]
 +
* [[#The_Front_Page|is_front_page]]
 +
* [[#The_Main_Page|is_home]]
 +
* [[#A_Date_Page|is_month]]
 +
* [[#A Multi-author Site|is_multi_author]]
 +
* [[#Part_of_a_network|is_multisite]]
 +
* [[#Main_Site_.28Multisite.29|is_main_site]]
 +
* [[#A_PAGE_Page|is_page]]
 +
* [[#Is_a_Page_Template|is_page_template]]
 +
* [[#A_Paged_Page|is_paged]]
 +
* [[#A_Preview|is_preview]]
 +
* [[#An_RTL_Language|is_rtl]]
 +
* [[#A_Search_Result_Page|is_search]]
 +
* [[#A_Single_Post_Page|is_single]]
 +
* [[#A_Single_Page,_Single_Post_or_Attachment|is_singular]]
 +
* [[#A_Sticky_Post|is_sticky]]
 +
* [[#Admin_of_a_network|is_super_admin]]
 +
* [[#A_Tag_Page|is_tag]]
 +
* [[#A_Taxonomy_Page|is_tax]]
 +
* [[#A Taxonomy Page|is_tax]]
 +
* [[#A_Date_Page|is_time]]
 +
* [[#A_Trackback|is_trackback]]
 +
* [[#A_Date_Page|is_year]]
 +
* [[#Any_Page_Containing_Posts|pings_open]]
 +
|}
 +
 
 +
== 外部リソース ==
 +
 
 +
* [http://www.carriedils.com/wordpress-conditional-tags/ What the Weatherman Can Teach You About WordPress Conditional Tags] by Carrie Dils
 +
* Go further with conditional tags: [https://github.com/Screenfeed/SF-Meta-Archives SF Meta Archives (github)] by Greg Viguier
 +
 
 +
== 変更履歴 ==
 +
 
 +
* [[Version 2.8|2.8]] : is_active_sidebar を追加。
 +
* (バージョン未確認): is_comments_popup, is_singular, has_excerpt, in_the_loop を追加。
 +
* [[Version 2.7|2.7]] : <code>is_sticky()</code> を追加。
 +
* [[Version 2.6|2.6]] : <code>has_tag()</code> を追加。
 +
* [[Version 2.5|バージョン 2.5]] :
 +
** <code>is_front_page</code>、<code>is_page_template</code> を追加。
 +
** いくつかの条件分岐タグは、引数に配列を渡せるようになりました。
 +
* [[Version 2.3]] : [[#タグページ|タグページ]]用の <code>is_tag()</code> を追加。
 +
* [[Version 2.1]] :
 +
** <code>is_home()</code> の動作が変わりました。[[Pages#Using a Page as the Front Page|参照]]
 +
** <code>comments_open</code>、<code>pings_open</code> を追加。
 +
* バージョン確認中 :
 +
** <code>is_preview()</code> を追加。
 +
** <code>is_admin()</code> を追加。
 +
** <code>is_attachment()</code> を追加。
 +
 
 +
{{原文|Conditional Tags|153565}}<!--22:24, 20 August 2015‎ Fgirardey  版 -->
 +
 
 +
==関数リファレンス==
 +
{{Conditional Tags}}
  
 
{{No Param Tag Footer}}
 
{{No Param Tag Footer}}
[[Category:Advanced Topics]]
+
 
[[Category:Design and Layout]]
+
{{DEFAULTSORT:しようけんふんきたく}}
[[Category:Template Tags]]
+
[[カテゴリ:条件分岐タグ|*]]
 +
[[カテゴリ:関数]]
 +
[[カテゴリ:上級トピック]]
 +
[[カテゴリ:デザインとレイアウト]]
 +
 
 +
[[en:Conditional Tags]]
 +
[[fr:Marqueurs conditionnels]]
 +
[[it:Tag condizionali]]
 +
[[ja:Conditional Tags]]
 +
[[tr:Koşul Etiketleri]]
 +
[[pt-br:Tags condicionais]]
 +
[[zh-hans:条件标签]]

2021年9月6日 (月) 15:10時点における最新版


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


目次

はじめに

条件分岐タグ (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()