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

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

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

提供: WordPress Codex 日本語版
移動先: 案内検索
(その他の使い方)
(2014-07-09T22:09:49 Nao 版に更新、一部翻訳。)
7行目: 7行目:
 
これらのタグは[[テンプレート階層]]と深い関わりがあります。
 
これらのタグは[[テンプレート階層]]と深い関わりがあります。
  
'''注:''' 条件分岐タグが使えるのは WordPress の ''init'' アクションフックの後のみです。テーマの function.php 本文内(関数の外)では正しく動作しません。
+
'''注:''' 条件分岐タグが使えるのは WordPress の ''posts_selection'' [[プラグイン_API/アクションフック一覧#一般的リクエスト中に実行されるアクション|アクションフック]]の後のみです (''wp'' アクションフックはこれらの条件分岐を使える最初のものです)。テーマの function.php 本文内 (関数の外) では正しく動作しません。
  
 
<div id="The_Conditions_For_...">
 
<div id="The_Conditions_For_...">
13行目: 13行目:
 
</div>
 
</div>
  
条件分岐タグは、現在のページが指定した条件に合致するかどうかをチェックし、TRUE もしくは FALSE を返します。以下の条件分岐タグの説明では、TRUE 値が返される場合の説明をしています。また、タグで引数が使える場合は追記してあります。
+
条件分岐タグは、現在のページが指定した条件に合致するかどうかをチェックし、true もしくは false を返します。以下の条件分岐タグの説明では、true 値が返される場合の説明をしています。また、タグで引数が使える場合は追記してあります。
 +
 
 +
<div id="The_Blog_Page">
 +
=== ブログページ ===
 +
</div>
 +
 
 +
; <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_home()</tt> と <tt>is_front_page()</tt> を使う場合はバグを防ぐために正しい順序で表記し、すべてのユーザー設定をテストする必要があります。
 +
<pre>if ( is_front_page() && is_home() ) {
 +
// デフォルトホームページ
 +
} elseif ( is_front_page() ) {
 +
// 固定ペーを使ったホームページ
 +
} elseif ( is_home() ) {
 +
// ブログページ
 +
} else {
 +
// それ以外
 +
}</pre>
  
 
<div id="The_Main_Page">
 
<div id="The_Main_Page">
19行目: 41行目:
 
</div>
 
</div>
  
; <tt>[[関数リファレンス/is_home|is_home()]]</tt> : メインブログページが表示されている場合。これは、あなたのサイトにある時系列のブログコンテンツを表示するページです。もしあなたがフロントページに固定ページを設定していた場合(以下を参照)、[[Administration_Panels|Administration]] >  [[Administration_Panels#Reading|Settings]] > [[Settings_Reading_SubPanel|Reading]]であなたが「投稿ページ」として設定したページでのみ、trueになります。
+
; <tt>[[関数リファレンス/is_home|is_home()]]</tt> : メインブログページが表示されている場合。これは、サイトにある時系列のブログコンテンツを表示するページです。もしあなたがフロントページに固定ページを設定していた場合(以下を参照)、[[Administration_Panels|Administration]] >  [[Administration_Panels#Reading|Settings]] > [[Settings_Reading_SubPanel|Reading]]であなたが「投稿ページ」として設定したページでのみ、trueになります。
  
 
<div id="The_Front_Page">
 
<div id="The_Front_Page">
26行目: 48行目:
 
</div>
 
</div>
  
; <tt>[[関数リファレンス/is_front_page|is_front_page()]]</tt> : サイトのフロントページが表示されている場合(投稿・[[Pages|固定ページ]]にかかわらず)。
+
; <tt>[[関数リファレンス/is_front_page|is_front_page()]]</tt> : 投稿・[[Pages|固定ページ]]にかかわらず、サイトのフロントページが表示されている場合。
 
: true を返すのは、[[Settings Reading SubPanel|表示設定]]の「トップページの表示」として
 
: true を返すのは、[[Settings Reading SubPanel|表示設定]]の「トップページの表示」として
 
:* 「最新の投稿」を設定している場合には、メインブログページが表示されるとき
 
:* 「最新の投稿」を設定している場合には、メインブログページが表示されるとき
45行目: 67行目:
  
 
; <tt>[[関数リファレンス/is_admin|is_admin()]]</tt>: ダッシュボードまたは管理パネルが表示されている場合。
 
; <tt>[[関数リファレンス/is_admin|is_admin()]]</tt>: ダッシュボードまたは管理パネルが表示されている場合。
 +
 +
''注''': '''wp-login.php''' ページは管理パネル内のページではない。このページが表示されているかを確認するには、<tt>[[グローバル変数#Admin_Globals|管理グローバル変数]]</tt> の '''$pagenow''' を使う。
 +
 +
<div id="The_Admin_Bar">
 +
=== 管理バー ===
 +
</div>
 +
 +
; <tt>[[関数リファレンス/is_admin_bar_showing|is_admin_bar_showing()]]</tt> : 管理バーが表示されている場合 <tt>true</tt> を返す。
 +
 +
''注'' : 管理バー表示をコントロールするには [[関数リファレンス/show_admin_bar|show_admin_bar()]] を使う。この関数は ''plugins_loaded'' の後ですぐ呼び出すか、テーマの ''functions.php'' ファイルに含める。
  
 
<div id="A_Single_Post_Page">
 
<div id="A_Single_Post_Page">
68行目: 100行目:
 
; <tt>is_sticky( '17' )</tt> : ID 17 の投稿が先頭固定表示の場合、真を返す。
 
; <tt>is_sticky( '17' )</tt> : ID 17 の投稿が先頭固定表示の場合、真を返す。
  
 +
<!--
 
<div id="A_Post_Type">
 
<div id="A_Post_Type">
 
=== 投稿タイプ ===
 
=== 投稿タイプ ===
74行目: 107行目:
 
; <tt> if( 'book' == get_post_type() ) ...</tt> : 現在の投稿が「book」という投稿タイプに属しているかを判定します。
 
; <tt> if( 'book' == get_post_type() ) ...</tt> : 現在の投稿が「book」という投稿タイプに属しているかを判定します。
 
; <tt>[[関数リファレンス/is_singular|is_singular()]]</tt>: <tt>is_single、is_page、is_attachment</tt>のいずれかの条件を満たすときにtrueを返します。投稿タイプの判定にも使えます。
 
; <tt>[[関数リファレンス/is_singular|is_singular()]]</tt>: <tt>is_single、is_page、is_attachment</tt>のいずれかの条件を満たすときにtrueを返します。投稿タイプの判定にも使えます。
; <tt>[[Function_Reference/post_type_exists|post_type_exists()]]</tt> : この[[Conditional_Tags|条件分岐タグ]]は、引数に与えられた名称の投稿タイプが存在するかチェックします。これはブール関数であり、グローバル変数 $wp_post_types を使用して投稿タイプの存在をチェックします。つまり、もし投稿タイプが存在すればTRUEを、存在しなければFALSEを返します。投稿タイプは[[関数リファレンス/register_post_type|登録された投稿タイプ]]でなければなりません。
+
; <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 id="A_Post_Type_is_Hierarchical">
 
 
=== 階層を持つ投稿タイプ ===
 
=== 階層を持つ投稿タイプ ===
 
</div>
 
</div>
 +
 
; <tt>[[関数リファレンス/is_post_type_hierarchical|is_post_type_hierarchical($post_type)]]</tt> : この[[Conditional_Tags|条件分岐タグ]]は、その投稿タイプが階層型かどうかチェックします。これはブール関数であり、TRUEかFALSEを返します(FALSEは、その投稿タイプが存在しないことを意味するかもしれません)。
 
; <tt>[[関数リファレンス/is_post_type_hierarchical|is_post_type_hierarchical($post_type)]]</tt> : この[[Conditional_Tags|条件分岐タグ]]は、その投稿タイプが階層型かどうかチェックします。これはブール関数であり、TRUEかFALSEを返します(FALSEは、その投稿タイプが存在しないことを意味するかもしれません)。
  
85行目: 118行目:
  
 
<div id="A_Post_Type_Archive">
 
<div id="A_Post_Type_Archive">
 
 
=== 投稿タイプアーカイブ ===
 
=== 投稿タイプアーカイブ ===
 
</div>
 
</div>
  
:<tt>[[関数リファレンス/is_post_type_archive|is_post_type_archive()]]</tt> : 現在のクエリが、引数に与えられた投稿タイプのアーカイブページのものかどうかチェックします。
+
;<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 を返す。
  
<div id="A_Comments_Popup">
+
投稿タイプアーカイブを有効にするには、[[関数リファレンス/register_post_type|その投稿タイプを登録する]]際に 'has_archive' => true を使う。
  
 +
<div id="A_Comments_Popup">
 
=== コメントポップアップ ===
 
=== コメントポップアップ ===
 
</div>
 
</div>
105行目: 140行目:
  
 
<div id="A_PAGE_Page">
 
<div id="A_PAGE_Page">
=== WordPress ページ ===
+
=== WordPress ページ ===
 
</div>
 
</div>
  
117行目: 152行目:
 
; <tt>is_page( array( 42, 54, 6 ) )</tt> : ID が 42、54、または6のいずれかの[[Pages|固定ページ]]が表示されている場合。
 
; <tt>is_page( array( 42, 54, 6 ) )</tt> : ID が 42、54、または6のいずれかの[[Pages|固定ページ]]が表示されている場合。
  
<div id="Testing_for_paginated_Pages">
+
他のスニペットについては [[関数リファレンス/is_page|is_page()]] を参照。
==== 複数にわたるページの一部かどうかをチェックする ====
+
</div>
+
You can use this code to check whether you're on the nth page in a Post or PAGE Page that has been divided into pages using the <tt><!<nowiki></nowiki>--nextpage--></tt> QuickTag. This can be useful, for example, if you wish to display meta-data only on the first page of a post divided into several pages.
+
  
'''例 1'''
+
'''': 固定ページがサブページかどうかをチェックする関数はありません。この問題を解決するには以下を参考にしてください。
<pre><?php       
+
$paged = $wp_query->get( 'paged' );
+
  
if ( ! $paged || $paged < 2 )
+
<pre>if ( is_page() && $post->post_parent > 0 ) {
{
+
     echo "これは子ページです";
    // 複数にわたるページの一部ではない場合 (または複数にわたる投稿・固定ページの最初のページの場合)
+
}</pre>
 
+
}
+
else
+
{
+
  // 複数にわたるページの一部である場合
+
 
+
}
+
?>
+
</pre>
+
 
+
'''例 2'''
+
<!-- Could someone please take a look at the difference between 'paged' & 'page'? I ran into some support requests, where people said it's 'page', not 'paged' -->
+
 
+
<pre><?php
+
$paged = get_query_var( 'page' ) ? get_query_var( 'page' ) : false;
+
if ( $paged === false )
+
{
+
    // 複数ページの一部ではない場合 (または投稿・固定ページの複数ページの最初のページの場合)
+
}
+
else
+
{
+
  // 複数ページの一部である場合
+
}
+
?></pre>
+
 
+
<div id="Testing_for_sub-Pages">
+
==== サブページかどうかをチェックする ====
+
</div>
+
 
+
残念ながら、<tt>is_subpage()</tt>というタグは今のところありませんが、対応策はあります。
+
 
+
'''スニペット 1'''
+
<pre><?php
+
global $post;    // ループ外の場合
+
 
+
if ( is_page() && $post->post_parent ) {
+
    // サブページの場合
+
} else {
+
    // サブページではない場合
+
}
+
?></pre>
+
 
+
以下のように <tt>is_subpage()</tt> 関数を作ることもできます。[[テーマの作成#Theme Functions File|functions.php]] ファイルにこの関数を追加すればスニペット 1 のようにサブページかどうかをチェックすることができます。この関数は現在のページがサブページなら親ページの ID を、サブページでないなら <tt>false</tt> を返します。
+
 
+
'''スニペット 2'''
+
<pre>
+
function is_subpage() {
+
global $post;                                // $post には現在の固定ページの情報があります
+
        if ( is_page() && $post->post_parent ) {      // 現在の固定ページが親ページを持つかどうかをチェックします
+
              return $post->post_parent;                      // 親ページの ID を返します
+
        } else {                                      // 親ページを持たないので...
+
              return false;                          // ...false を返します
+
        };
+
};
+
</pre>
+
 
+
サブページかどうかのチェックを頻繁にする予定なら、スニペット 1 よりも スニペット 2 のように関数にして利用する方が便利です。
+
 
+
現在のページの親ページが特定の固定ページ、例えば "紹介"(デフォルトでページ ID は 2)かどうかをチェックするならスニペット 3 のようにチェックできます。この方法は、指定したページであるか、またはそのサブページであるかをチェックします。サイトのセクションごとに異なった変数(バナーや見出しなど)を設定するのに便利です。
+
 
+
'''スニペット 3'''
+
<pre>
+
<?php
+
if ( is_page( 'about' ) || '2' == $post->post_parent ) {  
+
     // このページは "紹介"、または親ページが "紹介"
+
    $bannerimg = 'about.jpg';
+
 
+
} elseif ( is_page( 'learning' ) || '56' == $post->post_parent ) {
+
    $bannerimg = 'teaching.jpg';
+
 
+
} elseif ( is_page( 'admissions' ) || '15' == $post->post_parent ) { 
+
    $bannerimg = 'admissions.jpg';
+
 
+
} else {
+
    $bannerimg = 'home.jpg'; // 上のどれにも当てはまらないページ(たぶんホームページ)
+
}
+
 
+
?>
+
</pre>
+
 
+
スニペット 4 はスニペット 3 のチェックをより簡単に実現する関数です。この関数は指定したページ('紹介' など)またはそのサブページ(親ページの ID が 2)であれば true を返します。
+
 
+
'''スニペット 4'''
+
<pre>
+
function is_tree( $pid ) {      // $pid = 指定したページの ID
+
global $post;        // $post に現在の固定ページの情報をロード
+
 
+
    if ( is_page($pid) )
+
        return true;            // その固定ページまたはサブページの場合
+
 
+
    $anc = get_post_ancestors( $post->ID );
+
    foreach ( $anc as $ancestor ) {
+
        if( is_page() && $ancestor == $pid ) {
+
            return true;
+
        }
+
    }
+
 
+
    return false;  // その固定ページではない、または親ページではない場合
+
}
+
</pre>
+
 
+
スニペット 4 を [[テーマの作成#Theme Functions File|functions.php]] ファイルに追加して、<tt>is_tree( 'id' )</tt> を実行すると現在のページが指定したページ、またはそのサブページであるかどうかがわかります。例えば、スニペット 3 の始めの if ブロック内にある "<tt>is_page( 'about' ) || '2' == $post->post_parent</tt>" は <tt>is_tree( '2' )</tt> に置き換えられます。
+
 
+
注意:2階層以上のページ階層がある場合は、親ページは現在より1階層上のページを差します。ページ階層の最上にあるページではないことに注意してください。
+
  
 
<div id="Is_a_Page_Template">
 
<div id="Is_a_Page_Template">
240行目: 166行目:
  
 
; <tt>[[関数リファレンス/is_page_template|is_page_template()]]</tt> : [[Pages#ページテンプレート|ページテンプレート]]が使われている場合。
 
; <tt>[[関数リファレンス/is_page_template|is_page_template()]]</tt> : [[Pages#ページテンプレート|ページテンプレート]]が使われている場合。
; <tt>is_page_template('about.php')</tt> : "about" という[[Pages#ページテンプレート|ページテンプレート]]が使われている場合。他の条件分岐タグとは違い、特定のテンプレートを選びたい場合には about.php などのファイル名を指定する必要があります。
+
; <tt>is_page_template('about.php')</tt> : "about" という[[Pages#ページテンプレート|ページテンプレート]]が使われている場合。
 +
 
 +
''注'': ファイルがサブディレクトリにある場合はファイル名のみだけではなくパスも含める必要があります。例: <tt>page-templates/about.php</tt>
  
 
<div id="A_Category_Page">
 
<div id="A_Category_Page">
246行目: 174行目:
 
</div>
 
</div>
  
; <tt>[[関数リファレンス/is_category|is_category()]]</tt> : あるカテゴリーのアーカイブページが表示されている場合。
+
; <tt>[[関数リファレンス/is_category|is_category()]]</tt> : ページが <tt>$category</tt> カテゴリーと関連付けられている場合。
 
; <tt>is_category( '9' )</tt> : カテゴリーID 9のアーカイブページが表示されている場合。
 
; <tt>is_category( '9' )</tt> : カテゴリーID 9のアーカイブページが表示されている場合。
 
; <tt>is_category( 'Stinky Cheeses' )</tt> : "Stinky Cheeses"というカテゴリーのアーカイブページが表示されている場合。
 
; <tt>is_category( 'Stinky Cheeses' )</tt> : "Stinky Cheeses"というカテゴリーのアーカイブページが表示されている場合。
 
; <tt>is_category( 'blue-cheese' )</tt> : "blue-cheese"というカテゴリースラッグのアーカイブページが表示されている場合。
 
; <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>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( '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( 1,2,3 ) )</tt> : 現在の記事が、カテゴリID 1、2、3の'''いずれか'''に属している場合は true を返します。
; <tt>! in_category( array( 4,5,6 ) )</tt> : 現在の記事が、カテゴリID 4、5、6の'''いずれにも属していない'''場合は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|カテゴリーテンプレート]]も参照してください。
 
<tt>[[#Any Archive Page|is_archive()]]</tt> と[[Category Templates|カテゴリーテンプレート]]も参照してください。
265行目: 195行目:
 
; <tt>is_tag( 'mild' )</tt> : 'mild' というスラッグのついたタグのアーカイブページが表示されている場合。
 
; <tt>is_tag( 'mild' )</tt> : 'mild' というスラッグのついたタグのアーカイブページが表示されている場合。
 
; <tt>is_tag( array( 'sharp', 'mild', 'extreme' ) )</tt> : 'sharp' または 'mild' または 'extreme' というスラッグのついたタグのアーカイブページが表示されている場合。
 
; <tt>is_tag( array( 'sharp', 'mild', 'extreme' ) )</tt> : 'sharp' または 'mild' または 'extreme' というスラッグのついたタグのアーカイブページが表示されている場合。
; <tt>has_tag()</tt> : タグのある投稿がループ内で表示されている場合。
+
; <tt>[[関数リファレンス/has_tag|has_tag()]]</tt> : タグのある投稿がループ内で表示されている場合。バージョン2.7以前ではループ内で使う必要がある。
 
; <tt>has_tag( 'mild' )</tt> : 'mild' というタグのある投稿が表示されている場合。
 
; <tt>has_tag( 'mild' )</tt> : 'mild' というタグのある投稿が表示されている場合。
 
; <tt>has_tag( array( 'sharp', 'mild', 'extreme' ) )</tt> : 配列内のいずれかのタグのある投稿が表示されている場合。
 
; <tt>has_tag( array( 'sharp', 'mild', 'extreme' ) )</tt> : 配列内のいずれかのタグのある投稿が表示されている場合。
272行目: 202行目:
  
 
<div id="A_Taxonomy_Page">
 
<div id="A_Taxonomy_Page">
=== タクソノミーページ ===
+
=== タクソノミーページ (その他関連するもの) ===
 
</div>
 
</div>
  
 +
==== is_tax ====
 
; <tt>[[関数リファレンス/is_tax|is_tax()]]</tt> : タクソノミーのアーカイブページが表示されている場合。
 
; <tt>[[関数リファレンス/is_tax|is_tax()]]</tt> : タクソノミーのアーカイブページが表示されている場合。
 
; <tt>is_tax( 'flavor' )</tt> : 'flavor' というスラッグのついたタクソノミーのアーカイブページが表示されている場合。
 
; <tt>is_tax( 'flavor' )</tt> : 'flavor' というスラッグのついたタクソノミーのアーカイブページが表示されている場合。
281行目: 212行目:
 
<tt>[[#Any Archive Page|is_archive()]]</tt> もあわせてお読みください。
 
<tt>[[#Any Archive Page|is_archive()]]</tt> もあわせてお読みください。
  
<div id="A_Registered_Taxonomy">
+
==== has_term ====
=== 登録タクソノミー ===
+
 
</div>
+
; <tt>[[関数リファレンス/has_term|has_term()]]</tt> : Check if the current post has any of given terms. The first parameter should be an empty string. It expects a taxonomy slug/name as a second parameter.
 +
; <tt>has_term( 'green', 'color' )</tt> : When the current post has the term 'green' from taxonomy 'color'.
 +
; <tt>has_term( array( 'green', 'orange', 'blue' ), 'color' )</tt> : When the current post has any of the terms in the array.
 +
 
 +
==== term_exists ====
  
; <tt>[[関数リファレンス/taxonomy_exists|taxonomy_exists()]]</tt> : あるタクソノミーが [[関数リファレンス/register_taxonomy|register_taxonomy()]] を使って登録されている場合。バージョン 3.0 で非推奨になるまでは is_taxonomy() と呼ばれていた。
+
; <tt>[[関数リファレンス/term_exists|term_exists( $term, $taxonomy, $parent )]]</tt> : Returns <tt>true</tt> if <tt>$term</tt> exists in any taxonomy. If <tt>$taxonomy</tt> is given, the term must exist in this one. The 3rd parameter <tt>$parent</tt> is also optionnal, if given, the term have to be a child of this parent, the taxonomy must be hierarchical.
 +
 
 +
==== is_taxonomy_hierarchical ====
 +
 
 +
; <tt>[[関数リファレンス/is_taxonomy_hierarchical|is_taxonomy_hierarchical( $taxonomy )]]</tt> : Returns <tt>true</tt> is the taxonomy <tt>$taxonomy</tt> is hierarchical. To declare a taxonomie hierarchical, use <tt>'hierarchical' => true</tt> when using [[関数リファレンス/register_taxonomy|register_taxonomy()]].
 +
 
 +
==== 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 id="An_Author_Page">
314行目: 259行目:
 
; <tt>[[関数リファレンス/is_year|is_year()]]</tt> : 年別のアーカイブページが表示されている場合。
 
; <tt>[[関数リファレンス/is_year|is_year()]]</tt> : 年別のアーカイブページが表示されている場合。
 
; <tt>[[関数リファレンス/is_month|is_month()]]</tt> : 月別のアーカイブページが表示されている場合。
 
; <tt>[[関数リファレンス/is_month|is_month()]]</tt> : 月別のアーカイブページが表示されている場合。
; <tt>[[関数リファレンス/is_day|is_day()]]</tt> : 日別のアーカイブページが表示されている場合。
 
 
; <tt>[[関数リファレンス/is_time|is_time()]]</tt> : 毎時別、毎分別、毎秒別のアーカイブページが表示されている場合。
 
; <tt>[[関数リファレンス/is_time|is_time()]]</tt> : 毎時別、毎分別、毎秒別のアーカイブページが表示されている場合。
 
; <tt>[[関数リファレンス/is_new_day|is_new_day()]]</tt> : 投稿の日付が新しい日の場合。ループ内で使う。
 
; <tt>[[関数リファレンス/is_new_day|is_new_day()]]</tt> : 投稿の日付が新しい日の場合。ループ内で使う。
324行目: 268行目:
 
</div>
 
</div>
  
; <tt>[[関数リファレンス/is_archive|is_archive()]]</tt> : 各アーカイブページが表示されている場合。アーカイブページには、カテゴリー、タグ、作成者、日付別のものがあります。
+
; <tt>[[関数リファレンス/is_archive|is_archive()]]</tt> : 各アーカイブページが表示されている場合。アーカイブページには、カテゴリー、タグ、その他のタクソノミー項目、カスタム投稿タイプアーカイブ、作成者、日付別のものがあります。
  
 
<div id="A_Search_Result_Page">
 
<div id="A_Search_Result_Page">
348行目: 292行目:
 
</div>
 
</div>
  
; <tt>[[関数リファレンス/is_attachment|is_attachment()]]</tt> : 投稿または[[Pages|固定ページ]]の添付ファイルが表示されている場合。添付ファイルは、投稿画面のメディアアップロード機能を使ってアップロードした画像などのファイルの事で、テンプレートを使って独自のページ内に表示できます。詳細は、 [[Using Image and File Attachments|画像や添付ファイルの使い方]]/[[:en:Using Image and File Attachments|en]] をご覧ください。
+
; <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 )]]</tt> : Returns <tt>true</tt> if the link passed in <tt>$url</tt> is a real attachment file from this site.
  
 
<div id="A_Single_Page.2C_Single_Post_or_Attachment">
 
<div id="A_Single_Page.2C_Single_Post_or_Attachment">
 
=== シングルページ (固定ページ、個別投稿ページ、添付ファイルページ) ===
 
=== シングルページ (固定ページ、個別投稿ページ、添付ファイルページ) ===
 
</div>
 
</div>
; <tt>[[関数リファレンス/is_singular|is_singular()]]</tt> : <tt>is_single()</tt>、<tt>is_page()</tt> 、<tt>is_attachment()</tt> のいずれかが真である場合。
+
 
; <tt>is_singular( 'book' )</tt> : 'book' という[[投稿タイプ|カスタム投稿タイプ]]の投稿を表示している場合。
+
; <tt>[[関数リファレンス/is_singular|is_singular()]]</tt> : <tt>is_single()</tt>、<tt>is_page()</tt> 、<tt>is_attachment()</tt> のいずれかが真である場合に <tt>true</tt> を返す。
; <tt>is_singular( array( 'newspaper', 'book' ) )</tt> : 'newspaper' または 'book' という[[投稿タイプ|カスタム投稿タイプ]]の投稿を表示している場合。
+
; <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_main_query|is_main_query()]]</tt>: 現在のクエリ (ループ内など) が「メイン」クエリの場合に <tt>true</tt> を返す。
 +
 
 +
'''フィルターフック the_content を使った例'''
 +
<pre>
 +
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;
 +
}
 +
</pre>
 +
 
 +
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()]]</tt> : 新しい日付の場合 <tt>true</tt> を返す。
  
 
<div id="A_Syndication">
 
<div id="A_Syndication">
382行目: 384行目:
 
; <tt>[[関数リファレンス/has_excerpt|has_excerpt()]]</tt> : 投稿に (手動で書かれた) 抜粋がある場合。
 
; <tt>[[関数リファレンス/has_excerpt|has_excerpt()]]</tt> : 投稿に (手動で書かれた) 抜粋がある場合。
 
; <tt>has_excerpt( '42' )</tt> : 投稿 ID 42 の投稿に抜粋がある場合。
 
; <tt>has_excerpt( '42' )</tt> : 投稿 ID 42 の投稿に抜粋がある場合。
 
<pre><?php
 
//  もし関数内なら $post を取得
 
global $post;
 
 
if ( empty( $post->post_excerpt ) ) {
 
    // 投稿に抜粋がない場合
 
} else {
 
    // 投稿に抜粋がある場合
 
}
 
?></pre>
 
 
=== その他の使い方 ===
 
 
自動的な抜粋表示を隠して、あなたが入力した抜粋がある場合にのみ表示する必要がある場合。
 
 
<pre>
 
<?php if ( ! has_excerpt() ) {
 
      echo '';
 
} else {
 
      the_excerpt();
 
}
 
</pre>
 
 
自動的な抜粋表示を文字やコードに置き換える場合。
 
<pre>
 
<?php if ( ! has_excerpt() ) {?>
 
    <!-- you text or code -->
 
<?php } ?>
 
</pre>
 
  
 
<div id="Has_A_Nav_Menu_Assigned">
 
<div id="Has_A_Nav_Menu_Assigned">
 
 
=== ナビゲーションメニュー割り当てあり ===
 
=== ナビゲーションメニュー割り当てあり ===
 
</div>
 
</div>
 +
; <tt>[[関数リファレンス/has_nav_menu|has_nav_menu()]]</tt> : 登録済みのナビゲーションメニューロケーションにメニューが割り当てられている場合に <tt>true</tt> を返す。
  
; <tt>[[関数リファレンス/has_nav_menu|has_nav_menu()]]</tt> : 登録済みのナビゲーションメニュー一が割り当てられているかどうかをチェックする。割り当て済み (true) または割り当てなし (false) を返す。
+
[[関数リファレンス/register_nav_menu|register_nav_menu()]] も参照。
  
 
<div id="Inside_The_Loop">
 
<div id="Inside_The_Loop">
424行目: 396行目:
 
</div>
 
</div>
 
; <tt>[[関数リファレンス/in_the_loop|in_the_loop()]]</tt> : ループ内かどうかをチェックする。ループ内にあった場合真を返すので、プラグイン作者に便利。
 
; <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 id="Is_Sidebar_Active">
 
=== サイドバー使用中 ===
 
=== サイドバー使用中 ===
 
</div>
 
</div>
; <tt>[[関数リファレンス/is_active_sidebar|is_active_sidebar()]]</tt> : 指定したダイナミックサイドバーが使用中の場合、真を返す。サイドバー名、ID、番号を指定できる。
+
; <tt>[[関数リファレンス/is_active_sidebar|is_active_sidebar()]]</tt> : 指定したサイドバーが使用中の場合、''true'' を返す。サイドバー名、ID を指定できる。
  
<div id="Part_of_a_Network _Multisite">
+
''注'': サイドバーのコンテンツを表示するには [[関数リファレンス/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> を返す。
 +
 
 +
''注'' : To be effective this function has to run after widgets have initialized, at action 'init' or later, see [[Plugin_API/Action_Reference|Action Reference]].
 +
 
 +
<div id="Is_Blog_Installed">
 +
=== ブログインストール済み ===
 +
</div>
 +
; <tt>[[関数リファレンス/is_blog_installed|is_blog_installed()]]</tt> : 現在のブログが適切にインストールされている場合 <tt>true</tt> を返す。
 +
 
 +
''注'': The cache will be checked first. If you have a cache plugin, which saves the cache values, then this will work. If you use the default WordPress cache, and the database goes away, then you might have problems.
 +
 
 +
<div id="Right_To_Left_Reading">
 +
=== RTL 読み ===
 +
</div>
 +
; <tt>[[関数リファレンス/is_rtl|is_rtl()]]</tt> : 現在のロケールが右から左に読まれるものの場合 <tt>true</tt> を返す。
 +
 
 +
'''例'''
 +
<pre>
 +
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__ ) );
 +
}
 +
</pre>
 +
 
 +
<div id="Part_of_a_network">
 
=== ネットワークの一部(マルチサイト) ===
 
=== ネットワークの一部(マルチサイト) ===
 
</div>
 
</div>
 
; <tt>[[関数リファレンス/is_multisite is_multisite|is_multisite is_multisite()]]</tt> : 現在のサイトがマルチサイトインストールの一部かどうかチェックする。
 
; <tt>[[関数リファレンス/is_multisite is_multisite|is_multisite is_multisite()]]</tt> : 現在のサイトがマルチサイトインストールの一部かどうかチェックする。
+
 
 +
<div id="Main_Site_.28Multisite.29">
 +
=== メインサイト(マルチサイト) ===
 +
</div>
 +
; <tt>[[関数リファレンス/is_main_site|is_main_site()]]</tt> : サイトがネットワークのメインサイトかどうかチェックする。
 +
 
 
<div id="Admin_of_a_Network _Multisite">
 
<div id="Admin_of_a_Network _Multisite">
 
=== ネットワークの管理者(マルチサイト) ===
 
=== ネットワークの管理者(マルチサイト) ===
 
</div>
 
</div>
 
; <tt>[[関数リファレンス/is_super_admin|is_super_admin()]]</tt> : ユーザーがネットワークの特権管理者かどうかをチェックする。
 
; <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> : Check whether or not the given email address <tt>$email</tt> has already been registered to a username, and returns that user's <tt>ID</tt> or <tt>false</tt> if does not exists.
 +
 
 +
<div id="Username_Exists">
 +
=== 既存ユーザー名 ===
 +
</div>
 +
 
 +
; <tt>[[関数リファレンス/username_exists|username_exists( $username )]]</tt> : Check whether or not the given username <tt>$username</tt> has already been registered to a username, and returns that user's <tt>ID</tt> or <tt>false</tt> if does not exists.
 +
 
 
<div id="An_Active_Plugin">
 
<div id="An_Active_Plugin">
 
=== 有効化済みプラグイン ===
 
=== 有効化済みプラグイン ===
 
</div>
 
</div>
; <tt>[[関数リファレンス/is_plugin_active|is_plugin_active()]]</tt> : プラグインが有効化されているかチェックする。
+
; <tt>[[関数リファレンス/is_plugin_active|is_plugin_active( $path )]]</tt> : プラグインが有効化されているかチェックする。
+
; <tt>is_plugin_active( 'akismet/akismet.php' )</tt> : Checks if ''Akismet'' is activated.
 +
; <tt>[[関数リファレンス/is_plugin_inactive|is_plugin_inactive( $path )]]</tt> : Checks if a plugin is deactivated. Same as <tt>! is_plugin_active( $path )</tt>.
 +
; <tt>[[関数リファレンス/is_plugin_active_for_network|is_plugin_active_for_network( $path )]]</tt> : Same thing for a network activation on a multisite installation.
 +
; <tt>[[関数リファレンス/is_plugin_page|is_plugin_page()]]</tt> : Returns <tt>true</tt> if the loaded page, admin side is a plugin's one. '''This function is deprecated depuis since WordPress 3.1, with no known alternative.'''
 +
 
 +
<div id="A_Child_Theme">
 +
=== 子テーマ ===
 +
</div>
 +
; <tt>[[関数リファレンス/is_child_theme|is_child_theme()]]</tt> : 子テーマが使われているかどうかチェックする。
 +
 
 
<div id="Theme_supports_a_feature">
 
<div id="Theme_supports_a_feature">
 
=== 機能対応のテーマ ===
 
=== 機能対応のテーマ ===
 
</div>
 
</div>
 
; <tt>[[関数リファレンス/current_theme_supports|current_theme_supports()]]</tt> : テーマに機能が存在するかチェックする。
 
; <tt>[[関数リファレンス/current_theme_supports|current_theme_supports()]]</tt> : テーマに機能が存在するかチェックする。
 +
; <tt>current_theme_support( 'post-thumbnails' )</tt> : Returns <tt>true</tt> if the current theme supports [[Post_Thumbnails|featured images]]. To add a theme support functionality, use [[関数リファレンス/add_theme_support|add_theme_support()]].
 +
 +
<div id="Has_Post_Thumbnail">
 +
=== アイキャッチ画像あり ===
 +
</div>
 +
; <tt>[[関数リファレンス/has_post_thumbnail|has_post_thumbnail( $post_id )]]</tt> : Returns <tt>true</tt> if the post with <tt>ID</tt> equal to <tt>$post_id</tt> contains a featured image. Theme should support Featured Images, see above.
 +
 +
<div id="Script_Is_In_use">
 +
=== スクリプト使用中 ===
 +
</div>
 +
; <tt>[[関数リファレンス/wp_script_is|wp_script_is( $handle, $list )]]</tt> : Returns <tt>true</tt> if the script with ''handle'' is <tt>$handle</tt> has been 'registered', 'enqueue/queue', 'done', ou 'to_do' depending on <tt>$list</tt>.
 +
 +
'''Example'''
 +
<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>
 +
This would check if the script named 'fluidVids.js' is enqueued. If it is not enqueued, the files are then registered and enqueued.
 +
  
 
<div id="Working_Examples">
 
<div id="Working_Examples">
464行目: 526行目:
 
<pre>
 
<pre>
 
if ( is_single() ) {
 
if ( is_single() ) {
   echo 'この投稿は' . single_cat_title() . 'カテゴリーに属しています';
+
   echo 'この投稿は' . get_the_title() . 'カテゴリーに属しています';
 
}
 
}
 
</pre>
 
</pre>
  
以下の例は、現在表示しているページによって本文を表示するか抜粋を表示するかを切り替えます。
+
Add this custom function to your child themes functions.php file and modify the conditional tag to suit your needs.
 +
 
 +
<pre>
 +
add_action( 'loop_start', 'add_to_single_posts' );
 +
function add_to_single_posts() {
 +
if ( is_singular('post') ) {
 +
echo'<div class="your-class">Your Text or HTML</div>';
 +
    }
 +
}
 +
</pre>
 +
 
 +
Another example of how to use Conditional Tags in the Loop. Choose to display content or excerpt in index.php when this is a display single post or the home page.
  
 
<pre>
 
<pre>
478行目: 551行目:
 
}
 
}
 
</pre>
 
</pre>
 +
 +
When you need display a code or element, in a place that is NOT the home page.
 +
 +
<pre>
 +
<?php if ( ! is_home() ) {?>
 +
Insert your markup ...
 +
<?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 it's a single post or a single page, do something special
 +
}
 +
 +
if ( is_archive() && ! is_category( 'nachos' ) ) {
 +
    // If it's an archive page for any category EXCEPT nachos, do something special
 +
}
 +
</pre>
 +
 +
<pre>
 +
// 3つの条件をチェック
 +
 +
if ( $query->is_main_query() && is_post_type_archive( 'products' ) && ! is_admin() ) { 
 +
    // If it's the main query on a custom post type archive for Products
 +
    // And if we're not in the WordPress admin, then do something special
 +
}
 +
 +
if ( is_post_type_archive( 'movies' ) || is_tax( 'genre' ) || is_tax( 'actor' )  ) {
 +
    // If it's a custom post type archive for Movies
 +
    // Or it's a taxonomy archive for Genre
 +
    // Or it's a taxonomy archive for Actor, do something special
 +
}
 +
</pre>
 +
  
 
<div id="Date-Based_Differences">
 
<div id="Date-Based_Differences">
490行目: 605行目:
 
if ( have_posts() ) : while ( have_posts() ) : the_post(); ?>
 
if ( have_posts() ) : while ( have_posts() ) : the_post(); ?>
 
<h2 id="post-<?php the_ID(); ?>">
 
<h2 id="post-<?php the_ID(); ?>">
<a href="<?php the_permalink() ?>" rel="bookmark" title="Permanent Link to <?php the_title(); ?>">
+
<a href="<?php the_permalink() ?>" rel="bookmark" title="Permanent Link to <?php the_title_attribute(); ?>">
 
<?php the_title(); ?></a></h2>
 
<?php the_title(); ?></a></h2>
 
<small><?php the_time('Y/n/j') ?> <!-- by <?php the_author() ?> --></small>
 
<small><?php the_time('Y/n/j') ?> <!-- by <?php the_author() ?> --></small>
527行目: 642行目:
 
// ホームページを表示している際、トップレベルカテゴリーの一覧を表示
 
// ホームページを表示している際、トップレベルカテゴリーの一覧を表示
 
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() ) {
 
// カテゴリーアーカイブページを表示している際、そのカテゴリー内のサブカテゴリーを含む一覧を表示
 
// カテゴリーアーカイブページを表示している際、そのカテゴリー内のサブカテゴリーを含む一覧を表示
 
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() ) {
550行目: 665行目:
 
} // 以上で終わりです!
 
} // 以上で終わりです!
 
?>
 
?>
<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" />
565行目: 680行目:
 
=== 分かりやすい 404 ページ ===
 
=== 分かりやすい 404 ページ ===
 
</div>
 
</div>
[[Creating an Error 404 Page]] という投稿の [[Creating an Error 404 Page#サーバーが 404 ページを見つけるのを助ける|サーバーが 404 ページを見つけるのを助ける]] というセクションに、PHP の条件分岐関数 <code>isset()</code> を使う例が書かれています。
+
[[Creating an Error 404 Page]]」という記事の「[[Creating an Error 404 Page#サーバーが 404 ページを見つけるのを助ける|サーバーが 404 ページを見つけるのを助ける]]」というセクションに、PHP の条件分岐関数 <code>isset()</code> を使う例が書かれています。
  
<!-- リンク先のコード内のコメントも下記のように訳す。それまで参考としてコメントアウトで残しておきます。
 
威圧的で役に立たない404エラーページをよく見かけます。WordPress では、存在しないページへのリンクをクリックした時にメールで通知する機能を追加して、404ページの冷たい雰囲気を和らげ、読者にも管理人にも役に立つページにすることが出来ます。以下のスクリプトを使う際は、'''メールアドレスの設定'''を忘れずに行ってください。
 
 
<pre><nowiki>
 
<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>
 
</nowiki></pre>
 
-->
 
  
 
<div id="Dynamic_Menu_Highlighting">
 
<div id="Dynamic_Menu_Highlighting">
610行目: 690行目:
  
 
<div id="In_a_theme.27s_footer.php_file">
 
<div id="In_a_theme.27s_footer.php_file">
===テーマの footer.php ファイルで===
+
===テーマの footer.php ファイル内===
 
</div>
 
</div>
 
sidebar.php などの他のテンプレートファイルによってクエリが実行された場合、元の条件分岐タグは破損してしまいます。例えば、header.php では条件分岐タグが適切に機能するのに、footer.php では正しく機能しないトラブルがよくあります。これを解決するにはフッターで条件分岐タグを使う前に ''wp_reset_query'' を実行します:
 
sidebar.php などの他のテンプレートファイルによってクエリが実行された場合、元の条件分岐タグは破損してしまいます。例えば、header.php では条件分岐タグが適切に機能するのに、footer.php では正しく機能しないトラブルがよくあります。これを解決するにはフッターで条件分岐タグを使う前に ''wp_reset_query'' を実行します:
656行目: 736行目:
 
* [[#A_Tag_Page|has_tag]]
 
* [[#A_Tag_Page|has_tag]]
 
* [[#A_Category_Page|in_category]]
 
* [[#A_Category_Page|in_category]]
 +
* [[#A_Taxonomy_Page|has_term]]
 
* [[#A_404_Not_Found_Page|is_404]]
 
* [[#A_404_Not_Found_Page|is_404]]
 
* [[#The_Administration_Panels|is_admin]]
 
* [[#The_Administration_Panels|is_admin]]
662行目: 743行目:
 
* [[#An_Author_Page|is_author]]
 
* [[#An_Author_Page|is_author]]
 
* [[#A_Category_Page|is_category]]
 
* [[#A_Category_Page|is_category]]
 +
* [[#A_Child_Theme|is_child_theme]]
 
* [[#A_Comments_Popup|is_comments_popup]]
 
* [[#A_Comments_Popup|is_comments_popup]]
 
* [[#A_Date_Page|is_date]]
 
* [[#A_Date_Page|is_date]]
671行目: 753行目:
 
* [[#A Multi-author Site|is_multi_author]]
 
* [[#A Multi-author Site|is_multi_author]]
 
* [[#Part_of_a_network|is_multisite]]
 
* [[#Part_of_a_network|is_multisite]]
 +
* [[#Main_Site_.28Multisite.29|is_main_site]]
 
* [[#A_PAGE_Page|is_page]]
 
* [[#A_PAGE_Page|is_page]]
 
* [[#Is_a_Page_Template|is_page_template]]
 
* [[#Is_a_Page_Template|is_page_template]]
 
* [[#A_Paged_Page|is_paged]]
 
* [[#A_Paged_Page|is_paged]]
 
* [[#A_Preview|is_preview]]
 
* [[#A_Preview|is_preview]]
 +
* [[#An_RTL_Language|is_rtl]]
 
* [[#A_Search_Result_Page|is_search]]
 
* [[#A_Search_Result_Page|is_search]]
 
* [[#A_Single_Post_Page|is_single]]
 
* [[#A_Single_Post_Page|is_single]]
688行目: 772行目:
 
* [[#Any_Page_Containing_Posts|pings_open]]
 
* [[#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
  
 
== 変更履歴 ==
 
== 変更履歴 ==
707行目: 796行目:
 
** <code>is_attachment()</code> を追加。
 
** <code>is_attachment()</code> を追加。
  
{{原文|Conditional Tags|111270}}<!-- 2011-11-28T22:11:30 Jeffsebring 版 -->
+
{{原文|Conditional Tags|144797}}<!-- 2014-07-09T22:09:49 Nao 版 -->
  
 
==関数リファレンス==
 
==関数リファレンス==
727行目: 816行目:
 
[[en:Conditional Tags]]
 
[[en:Conditional Tags]]
 
[[fr:Marqueurs conditionnels]]
 
[[fr:Marqueurs conditionnels]]
 +
[[it:Tag condizionali]]
 
[[pt-br:Tags condicionais]]
 
[[pt-br:Tags condicionais]]
 
[[tr:Koşul Etiketleri]]
 
[[tr:Koşul Etiketleri]]
 
[[zh-hans:条件标签]]
 
[[zh-hans:条件标签]]

2014年7月10日 (木) 12:20時点における版

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

目次

はじめに

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

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

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

条件の判定

条件分岐タグは、現在のページが指定した条件に合致するかどうかをチェックし、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_admin_bar_showing() 
管理バーが表示されている場合 true を返す。

 : 管理バー表示をコントロールするには show_admin_bar() を使う。この関数は 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() 
Check if the current post has any of given terms. The first parameter should be an empty string. It expects a taxonomy slug/name as a second parameter.
has_term( 'green', 'color' ) 
When the current post has the term 'green' from taxonomy 'color'.
has_term( array( 'green', 'orange', 'blue' ), 'color' ) 
When the current post has any of the terms in the array.

term_exists

term_exists( $term, $taxonomy, $parent ) 
Returns true if $term exists in any taxonomy. If $taxonomy is given, the term must exist in this one. The 3rd parameter $parent is also optionnal, if given, the term have to be a child of this parent, the taxonomy must be hierarchical.

is_taxonomy_hierarchical

is_taxonomy_hierarchical( $taxonomy ) 
Returns true is the taxonomy $taxonomy is hierarchical. To declare a taxonomie hierarchical, use 'hierarchical' => true when using register_taxonomy().

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() 
年別のアーカイブページが表示されている場合。
is_month() 
月別のアーカイブページが表示されている場合。
is_time() 
毎時別、毎分別、毎秒別のアーカイブページが表示されている場合。
is_new_day() 
投稿の日付が新しい日の場合。ループ内で使う。

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 ) 
Returns true if the link passed in $url is a real attachment file from this site.

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

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() 
新しい日付の場合 true を返す。

フィード

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

トラックバック

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

プレビュー

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

抜粋あり

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

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

has_nav_menu() 
登録済みのナビゲーションメニューロケーションにメニューが割り当てられている場合に 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 を返す。

 : To be effective this function has to run after widgets have initialized, at action 'init' or later, see Action Reference.

ブログインストール済み

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

: The cache will be checked first. If you have a cache plugin, which saves the cache values, then this will work. If you use the default WordPress cache, and the database goes away, then you might have problems.

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 is_multisite() 
現在のサイトがマルチサイトインストールの一部かどうかチェックする。

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

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

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

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

ユーザーログイン済み

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

既存メール

email_exists( $email ) 
Check whether or not the given email address $email has already been registered to a username, and returns that user's ID or false if does not exists.

既存ユーザー名

username_exists( $username ) 
Check whether or not the given username $username has already been registered to a username, and returns that user's ID or false if does not exists.

有効化済みプラグイン

is_plugin_active( $path ) 
プラグインが有効化されているかチェックする。
is_plugin_active( 'akismet/akismet.php' ) 
Checks if Akismet is activated.
is_plugin_inactive( $path ) 
Checks if a plugin is deactivated. Same as ! is_plugin_active( $path ).
is_plugin_active_for_network( $path ) 
Same thing for a network activation on a multisite installation.
is_plugin_page() 
Returns true if the loaded page, admin side is a plugin's one. This function is deprecated depuis since WordPress 3.1, with no known alternative.

子テーマ

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

機能対応のテーマ

current_theme_supports() 
テーマに機能が存在するかチェックする。
current_theme_support( 'post-thumbnails' ) 
Returns true if the current theme supports featured images. To add a theme support functionality, use add_theme_support().

アイキャッチ画像あり

has_post_thumbnail( $post_id ) 
Returns true if the post with ID equal to $post_id contains a featured image. Theme should support Featured Images, see above.

スクリプト使用中

wp_script_is( $handle, $list ) 
Returns true if the script with handle is $handle has been 'registered', 'enqueue/queue', 'done', ou 'to_do' depending on $list.

Example

    $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' );
      }

This would check if the script named 'fluidVids.js' is enqueued. If it is not enqueued, the files are then registered and enqueued.


動作サンプル

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

個別投稿

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

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

Add this custom function to your child themes functions.php file and modify the conditional tag to suit your needs.

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

Another example of how to use Conditional Tags in the Loop. Choose to display content or excerpt in index.php when this is a display single post or the home page.

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

When you need display a code or element, in a place that is NOT the home page.

<?php if ( ! is_home() ) {?>
 Insert your markup ...
<?php } ?>

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

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

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

if ( is_single() || is_page() ) ) {
    // If it's a single post or a single page, do something special
}

if ( is_archive() && ! is_category( 'nachos' ) ) {
    // If it's an archive page for any category EXCEPT nachos, do something special
}
// 3つの条件をチェック

if ( $query->is_main_query() && is_post_type_archive( 'products' ) && ! is_admin() ) {  
    // If it's the main query on a custom post type archive for Products
    // And if we're not in the WordPress admin, then do something special
}

if ( is_post_type_archive( 'movies' ) || is_tax( 'genre' ) || is_tax( 'actor' )  ) {
    // If it's a custom post type archive for Movies
    // Or it's a taxonomy archive for Genre
    // Or it's a taxonomy archive for Actor, do something special
}


日付別の表示

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

<?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>

サイドバーの内容をページによって変更する

以下の例では、閲覧中のページによってサイドバーに表示させる内容を変更します。

(注)下記コード内の wp_list_cats は廃止予定です。替わりにwp_list_categories をお使いください。(コードを直してくれる人募集中!)

<!-- サイドバー開始 -->
<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 ページ

Creating an Error 404 Page」という記事の「サーバーが 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()