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

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

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

提供: WordPress Codex 日本語版
移動先: 案内検索
({{Rename}} を外し、{{Old}} を追加。)
(最新情報に更新(用例の差し替え・追加など)、未翻訳。「条件分岐タグ」に統一。メインページ・フロントページの説明を実際に合うよう修正。リンク切れ修正。)
1行目: 1行目:
{{Old}}
+
{{NeedTrans|一部}}
 
{{CheckTrans}}
 
{{CheckTrans}}
 
{{テーマ・テンプレートガイド}}
 
{{テーマ・テンプレートガイド}}
 
== はじめに ==
 
== はじめに ==
  
条件タグ (Conditional Tag) は、テンプレートファイル内で表示される内容や、特定のページ内容を表示する条件を設定するのに使います。例えば、ブログのホームページの上部に短い文を表示させたいとしましょう。<tt>[[#The Main Page|is_home()]]</tt>を使えば、簡単に実行できます。
+
'''条件分岐タグ''' (Conditional Tag) は、テンプレートファイル内で表示される内容や、特定のページ内容を表示する条件を設定するのに使います。例えば、ブログのホームページの上部に短い文を表示させたいとしましょう。<tt>[[#The Main Page|is_home()]]</tt>を使えば、簡単に実行できます。
  
 
これらのタグは[[テンプレート階層]]と深い関わりがあります。
 
これらのタグは[[テンプレート階層]]と深い関わりがあります。
12行目: 12行目:
 
</div>
 
</div>
  
条件タグは、現在のページが指定した条件にマッチするかどうかをチェックし、TRUE もしくは FALSE を返します。以下の条件タグの説明では、TRUE 値が返される場合の説明をしています。また、タグで引数が使える場合は追記してあります。
+
条件分岐タグは、現在のページが指定した条件に合致するかどうかをチェックし、TRUE もしくは FALSE を返します。以下の条件分岐タグの説明では、TRUE 値が返される場合の説明をしています。また、タグで引数が使える場合は追記してあります。
  
 
<div id="The_Main_Page">
 
<div id="The_Main_Page">
18行目: 18行目:
 
</div>
 
</div>
  
; <tt>is_home()</tt> : メインページ(ブログのホームページ)が表示されている場合。
+
; <tt>is_home()</tt> : メインブログページが表示されている場合。
: WordPress 2.1 以降では、この条件タグの動作がそれまでのバージョンとは異なります。[[Pages#Alternate Methods for Setting the Front Page for pre-2.1. WP|Alternate Methods for Setting the Front Page for pre-2.1. WP]] を参照してください。
+
: WordPress 2.1 以降では、この条件分岐タグの動作がそれまでのバージョンとは異なります。[[Pages#Alternate Methods for Setting the Front Page for pre-2.1. WP|2.1 以前のフロントページ設定方法]]を参照してください。
  
'''注:''' もし表示設定で固定ページをフロントページに設定した場合、このタグは投稿ページのトップページに適用されます (下の項目参照)。
+
'''注:''' [[Settings Reading SubPanel|表示設定]]の「フロントページの表示」として「固定ページ」を設定している場合、このタグは「投稿ページ」を表示するときに true を返します。(次項参照)
  
 
<div id="The_Front_Page">
 
<div id="The_Front_Page">
27行目: 27行目:
 
</div>
 
</div>
  
; <tt>is_front_page()</tt> : サイトのフロントページが表示されている場合。これは、投稿の場合と[[Pages|ページ]]の場合があります。[[管理パネル|管理画面]]の「[[管理パネル#Settings - Configuration Settings|設定]] > [[Settings Reading SubPanel|表示設定]] -> トップページの表示」で、「最新の投稿」が選択されているか、「固定ページ (以下を選択)」で現在の[[Pages|ページ]]が表示されている場合。
+
; <tt>is_front_page()</tt> : サイトのフロントページが表示されている場合(投稿・[[Pages|ページ]]にかかわらず)。
: 注: この条件タグは [[Version 2.5|バージョン 2.5]] で追加されました。
+
: true を返すのは、[[Settings Reading SubPanel|表示設定]]の「トップページの表示」として
 +
:* 「最新の投稿」を設定している場合には、メインブログページが表示されるとき
 +
:* 「固定ページ (以下を選択)」を設定している場合には、「フロントページ」として選択した[[Page|ページ]]が表示されるとき
 +
: 注: この条件分岐タグは [[Version 2.5|バージョン 2.5]] で追加されました。
 +
<!--
 +
[[管理パネル]] > [[管理パネル#Settings|設定]] > [[Settings Reading SubPanel|表示設定]]画面:
 +
* トップページの表示
 +
** ○ 最新の投稿 ← このページ(メインブログページ)を表示するとき、is_home(), is_front_page が true
 +
** ○ 固定ページ
 +
*** フロントページ ←  このページ(サイトのトップページ)を表示するとき、is_front_page() が true
 +
*** 投稿ページ   ← このページ(ブログページ)を表示するとき、is_home() が true
 +
-->
  
 
<div id="The_Administration_Panels">
 
<div id="The_Administration_Panels">
45行目: 56行目:
 
; <tt>is_single('beef-stew')</tt> : "beef-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,'beef-stew','Irish Stew'))</tt> : ID が 17、投稿スラッグが "beef-stew"、またはタイトルが "Irish Stew" のいずれかにあてはまる記事が表示されている場合。
: 注: 配列を引数に使えるのは [[Version 2.5|バージョン 2.5]] 以降からです。
+
; <tt>is_single(array(17, 19, 1, 11)) </tt> : Returns true when the single post being displayed is either ''post ID'' 17, ''post ID'' 19, ''post ID'' 1, or  ''post ID'' 11.
 +
; <tt>is_single(array('beef-stew', 'pea-soup', 'chili')) </tt> : Returns true when the single post being displayed is either the ''post_name'' "beef-stew", ''post_name'' "pea-soup" or ''post_name'' "chili".
 +
; <tt>is_single(array('Beef Stew', 'Pea Soup', 'Chili')) </tt> : Returns true when the single post being displayed is either the ''post_title'' "Beef Stew", ''post_title'' "Pea Soup" or ''post_title'' "Chili".
 +
 
 +
注: 配列を引数に使えるのは [[Version 2.5|バージョン 2.5]] 以降からです。 This function does not distinguish between the post ID, post title, or post name. A post named "17" would be displayed if a post ID of 17 was requested.
  
 
<div id="A_Sticky_Post">
 
<div id="A_Sticky_Post">
51行目: 66行目:
 
</div>
 
</div>
 
; <tt>is_sticky()</tt> : 投稿編集ページで「この投稿を先頭に固定表示」のチェックボックスがついている投稿が表示されている場合。もし ID 変数が指定されていない場合、投稿 ID は [[The Loop|WordPress ループ]]の投稿のものになる。
 
; <tt>is_sticky()</tt> : 投稿編集ページで「この投稿を先頭に固定表示」のチェックボックスがついている投稿が表示されている場合。もし ID 変数が指定されていない場合、投稿 ID は [[The Loop|WordPress ループ]]の投稿のものになる。
: 注: この条件タグは [[Version 2.7|バージョン 2.7]] で追加されました。
+
: 注: この条件分岐タグは [[Version 2.7|バージョン 2.7]] で追加されました。
 
; <tt>is_sticky('17')</tt> : ID 17 の投稿が先頭固定表示の場合、真を返す。
 
; <tt>is_sticky('17')</tt> : ID 17 の投稿が先頭固定表示の場合、真を返す。
  
85行目: 100行目:
 
残念ながら、<tt>is_subpage()</tt>というタグは今のところありませんが、対応策はあります。
 
残念ながら、<tt>is_subpage()</tt>というタグは今のところありませんが、対応策はあります。
  
 +
'''Snippet 1'''
 
<pre><?php
 
<pre><?php
// 関数内なら $post を取得
+
global $post;     // ループ外の場合
global $post;
+
  
 
if ( is_page() && $post->post_parent ) {
 
if ( is_page() && $post->post_parent ) {
96行目: 111行目:
 
?></pre>
 
?></pre>
  
下記のコードをテーマフォルダ内の functions.php ファイル (なければ作成する) に追加します。
+
You can create your own is_subpage() function using the code in Snippet 2. Add it to your [[テーマの作成#Theme Functions File|functions.php]] file. It tests for a parent page in the same way as Snippet 1, but will return the ID of the page parent if there is one, or <tt>false</tt> if there isn't.
  
 +
'''Snippet 2'''
 
<pre>
 
<pre>
function is_tree($pid) {   // $pid = 探しているサブページ
+
function is_subpage() {
global $post;       // 投稿の外にいるのでこれを読み込む
+
global $post;                                 // load details about this page
if(is_page()&&($post->post_parent==$pid||is_page($pid))) return true; // ツリー内の場合
+
        if ( is_page() && $post->post_parent ) {      // test to see if the page has a parent
else return false; // ツリーの外の場合
+
              $parentID = $post->post_parent;        // the ID of the parent is this
 +
              return $parentID;                     // return the ID
 +
        } else {                                      // there is no parent so...
 +
              return false;                         // ...the answer to the question is false
 +
        };
 
};
 
};
 
</pre>
 
</pre>
  
そして <tt>is_tree('id')</tt> を呼び出し、そのページがツリー内にあるかチェックします。以下の例では、 最初の <tt>if</tt> 内で <tt>is_tree('2')</tt> が "<tt>is_page('about') || $post->post_parent == '2'</tt>" に置き換えられます。もし複数階層のページがある場合、親ページは一つ上の階層のページであり、一番上の階層のページではありません。
+
It is advisable to use a function like that in Snippet 2, rather than using the simple test like Snippet 1, if you plan to test for sub pages frequently.
  
表示しているのが指定したページか、またはそのページのサブページであることをチェックしたい場合、親ページの ID をバックエンドから取得し、以下のコードを使います。以下は表示中のページによって取得する画像を変える場合の例です。
+
To test if the parent of a page is a specific page, for instance "About" (page id ''pid'' 2 by default), we can use the tests in Snippet 3. These tests check to see if we are looking at the page in question, as well as if we are looking at any child pages. This is useful for setting variables specific to different sections of a web site, so a different banner image, or a different heading.
  
 +
'''Snippet 3'''
 
<pre>
 
<pre>
 
<?php
 
<?php
  
if ( is_page('about') || $post->post_parent == '2' ) {  
+
if ( is_page('about') || $post->post_parent == '2' ) {  
     $bannerimg = 'home.jpg';
+
    // the page is "About", or the parent of the page is "About"
 +
     $bannerimg = 'about.jpg';
  
 
} elseif ( is_page('learning') || $post->post_parent == '56' ) {
 
} elseif ( is_page('learning') || $post->post_parent == '56' ) {
123行目: 145行目:
  
 
} else {  
 
} else {  
     $bannerimg = 'home.jpg'; // 上記以外の場合
+
     $bannerimg = 'home.jpg'; // just in case we are at an unclassified page, perhaps the home page
 
}
 
}
  
129行目: 151行目:
 
</pre>
 
</pre>
  
もしこれを何度も使いたいなら、メンテナンスしやすい関数 (<tt>is_cpage()</tt>) を作成するのをお勧めします。例えば、もし <tt>is_subpage()</tt> という関数が WordPress に登場した場合、functions.php を書き換えるだけで簡単に入れ替えることができます。
+
Snippet 4 is a function that allows you to carry out the tests above more easily. This function will return true if we are looking at the page in question (so "About") or one of its sub pages (so a page with a parent with ID "2").
 +
 
 +
'''Snippet 4'''
 +
<pre>
 +
function is_tree($pid) {      // $pid = The ID of the page we're looking for pages underneath
 +
global $post;        // load details about this page
 +
if(is_page()&&($post->post_parent==$pid||is_page($pid)))
 +
              return true;  // we're at the page or at a sub page
 +
else
 +
              return false;  // we're elsewhere
 +
};
 +
</pre>
 +
 
 +
Add Snippet 4 to your [[テーマの作成#Theme Functions File|functions.php]] file, and call <tt>is_tree('id')</tt> to see if the current page is the page, or is a sub page of the page. In Snippet 3, <tt>is_tree('2')</tt> would replace "<tt>is_page('about') || $post->post_parent == '2'</tt>" inside the first <tt>if</tt> tag.
 +
 
 +
Note that if you have more than one level of pages the parent page is the one directly above and not the one at the very top of the hierarchy.
  
 
<div id="Is_a_Page_Template">
 
<div id="Is_a_Page_Template">
 
==== ページテンプレート ====
 
==== ページテンプレート ====
 
</div>
 
</div>
[[Version 2.5|バージョン 2.5]]以降から、この条件タグを使って特定の[[Pages#ページテンプレート|ページテンプレート]]を使っているかどうかをチェックできるようになりました。
+
[[Version 2.5|バージョン 2.5]]以降から、この条件分岐タグを使って特定の[[Pages#ページテンプレート|ページテンプレート]]を使っているかどうかをチェックできるようになりました。
  
 
; <tt>is_page_template()</tt> : [[Pages#ページテンプレート|ページテンプレート]]が使われている場合。
 
; <tt>is_page_template()</tt> : [[Pages#ページテンプレート|ページテンプレート]]が使われている場合。
166行目: 203行目:
  
 
<tt>[[#Any Archive Page|is_archive()]]</tt>と [[Tag Templates|タグテンプレート]]/[[:en:Tag Templates|en]] も併せてお読み下さい。
 
<tt>[[#Any Archive Page|is_archive()]]</tt>と [[Tag Templates|タグテンプレート]]/[[:en:Tag Templates|en]] も併せてお読み下さい。
 +
 +
<div id="A_Taxonomy_Page">
 +
=== A Taxonomy Page ===
 +
</div>
 +
 +
; <tt>is_tax()</tt> : When any Taxonomy archive page is being displayed.
 +
; <tt>is_tax('mild')</tt> : When the archive page for taxonomy with the slug of 'mild' is being displayed.
 +
; <tt>is_tax(array('sharp','mild','extreme'))</tt> : Returns true when the taxonomy archive being displayed has a slug of either "sharp", "mild", or "extreme".
 +
 +
See also <tt>[[#Any Archive Page|is_archive()]]</tt>.
  
 
<div id="An_Author_Page">
 
<div id="An_Author_Page">
214行目: 261行目:
 
</div>
 
</div>
  
; <tt>is_paged()</tt> : 表示中のページが複数のページにわたる場合。これは例えばアーカイブページやメインページに表示する記事数よりも多い記事があり、複数ページに分かれているときを指します。ただし、1つの記事や[[Pages|ページ]]のコンテンツが <tt><nowiki><!--nextpage--></nowiki></tt> [[Writing Posts#クイックタグ|クイックタグ]]/[[:en:Writing Posts#Here is a run-down of the quicktag functions:|en]] で複数に分けられている場合は当てはまりません。
+
; <tt>is_paged()</tt> : 表示中のページが複数のページにわたる場合。これは例えばアーカイブページやメインページに表示する記事数よりも多い記事があり、複数ページに分かれているときを指し、2ページ目以降のときに true を返します。ただし、1つの記事や[[Pages|ページ]]の本文が <tt><nowiki><!--nextpage--></nowiki></tt> [[Writing Posts#Visual Versus HTML Editor|クイックタグ]]で複数ページに分けられている場合は当てはまりません。
  
 
<div id="An_Attachment">
 
<div id="An_Attachment">
273行目: 320行目:
 
</div>
 
</div>
 
; <tt>is_active_sidebar()</tt> : 指定したダイナミックサイドバーが使用中の場合、真を返す。サイドバー名、ID、番号を指定できる。
 
; <tt>is_active_sidebar()</tt> : 指定したダイナミックサイドバーが使用中の場合、真を返す。サイドバー名、ID、番号を指定できる。
: 注: この条件タグは [[Version 2.8|バージョン 2.8]] で追加されました。
+
: 注: この条件分岐タグは [[Version 2.8|バージョン 2.8]] で追加されました。
  
 
<div id="Working_Examples">
 
<div id="Working_Examples">
279行目: 326行目:
 
</div>
 
</div>
  
以下は条件タグの動作サンプルです。
+
以下は条件分岐タグの動作サンプルです。
  
 
<div id="Single_Post">
 
<div id="Single_Post">
287行目: 334行目:
 
以下は<tt>is_single()</tt>によって特定の情報を個別記事のページでのみ表示させるための例文です。
 
以下は<tt>is_single()</tt>によって特定の情報を個別記事のページでのみ表示させるための例文です。
  
<pre><nowiki>
+
<pre>
if (is_single())
+
if ( is_single() ) {
{
+
  echo 'この記事は' . single_cat_title() . 'カテゴリーに属しています';
    echo 'この記事は' . single_cat_title() . 'カテゴリーに属しています';
+
 
}
 
}
</nowiki></pre>
+
</pre>
 +
 
 +
Other example how to use Conditional Tags into loop. choose display content or excerpt in the index.php, when this is unique archive for display single post, categories, home and page.
 +
 
 +
<pre>
 +
if (is_home() || is_single()) {
 +
  the_content();
 +
}
 +
else {
 +
  the_excerpt();
 +
}
 +
</pre>
  
 
<div id="Date-Based_Differences">
 
<div id="Date-Based_Differences">
379行目: 436行目:
 
=== 分かりやすい 404 ページ ===
 
=== 分かりやすい 404 ページ ===
 
</div>
 
</div>
[[Creating an Error 404 Page]] という記事の [[Creating_an_Error_404_Page#.E3.82.B5.E3.83.BC.E3.83.90.E3.83.BC.E3.81.8C_404_.E3.83.9A.E3.83.BC.E3.82.B8.E3.82.92.E8.A6.8B.E3.81.A4.E3.81.91.E3.82.8B.E3.81.AE.E3.82.92.E5.8A.A9.E3.81.91.E3.82.8B|サーバーが 404 ページを見つけるのを助ける]] というセクションに、PHP の条件分岐関数 <code>isset()</code> を使う例が書かれています。
+
[[Creating an Error 404 Page]] という記事の [[Creating an Error 404 Page#サーバーが 404 ページを見つけるのを助ける|サーバーが 404 ページを見つけるのを助ける]] というセクションに、PHP の条件分岐関数 <code>isset()</code> を使う例が書かれています。
  
 
<!-- リンク先のコード内のコメントも下記のように訳す。それまで参考としてコメントアウトで残しておきます。
 
<!-- リンク先のコード内のコメントも下記のように訳す。それまで参考としてコメントアウトで残しておきます。
421行目: 478行目:
 
</div>
 
</div>
  
[[Dynamic Menu Highlighting|ダイナミックハイライト]]とは、条件タグを使用して、メニュー内の現在アクセスしているページを際立たせる方法です。
+
[[Dynamic Menu Highlighting|ダイナミックハイライト]]とは、条件分岐タグを使用して、メニュー内の現在アクセスしているページを際立たせる方法です。
 +
 
 +
<div id="In_a_theme.27s_footer.php_file">
 +
===In a theme's footer.php file===
 +
</div>
 +
At times queries performed in other templates such as sidebar.php may corrupt certain conditional tags.  For instance, in header.php a conditional tag works properly but doesn't work in a theme's footer.php.  The trick is to put ''wp_reset_query'' before the conditional test in the footer.  For example:
 +
 
 +
<pre>
 +
<?php
 +
wp_reset_query();
 +
if (is_page('2') ) {
 +
echo 'this is page 2!';
 +
}
 +
?>
 +
</pre>
  
 
<div id="Conditional_Tags_Index">
 
<div id="Conditional_Tags_Index">
428行目: 499行目:
  
 
{| cellspacing="10" width="100%"
 
{| cellspacing="10" width="100%"
|- style="width:50%; background:#464646; color:#d7d7d7;"
+
|- style="vertical-align:top;"
! '''アルファベット順一覧 I''' !! '''アルファベット順一覧 II'''
+
| style="width:100%" |
 +
 
 +
{| class="widefat"
 +
|- style="background:#464646; color:#d7d7d7;"
 +
! '''アルファベット順一覧'''
 
|-  
 
|-  
| style="vertical-align:top;" |  
+
|
 
* [[#Any_Page_Containing_Posts|comments_open]]
 
* [[#Any_Page_Containing_Posts|comments_open]]
 
* [[#A_Tag_Page|has_tag]]
 
* [[#A_Tag_Page|has_tag]]
457行目: 532行目:
 
* [[#A_Sticky_Post|is_sticky]]
 
* [[#A_Sticky_Post|is_sticky]]
 
* [[#A_Tag_Page|is_tag]]
 
* [[#A_Tag_Page|is_tag]]
 +
* [[#A Taxonomy Page|is_tax]]
 
* [[#A_Date_Page|is_time]]
 
* [[#A_Date_Page|is_time]]
 
* [[#A_Trackback|is_trackback]]
 
* [[#A_Trackback|is_trackback]]
 
* [[#A_Date_Page|is_year]]
 
* [[#A_Date_Page|is_year]]
 
* [[#Any_Page_Containing_Posts|pings_open]]
 
* [[#Any_Page_Containing_Posts|pings_open]]
| style="vertical-align:top;" |
 
* [[#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|in_category]]
 
* [[#A_Category_Page|is_category]]
 
* [[#Any_Page_Containing_Posts|comments_open]]
 
* [[#A_Comments_Popup|is_comments_popup]]
 
* [[#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_PAGE_Page|is_page]]
 
* [[#Is_a_Page_Template|is_page_template]]
 
* [[#A_Paged_Page|is_paged]]
 
* [[#Any_Page_Containing_Posts|pings_open]]
 
* [[#A_Preview|is_preview]]
 
* [[#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]]
 
* [[#A_Tag_Page|has_tag]]
 
* [[#A_Tag_Page|is_tag]]
 
* [[#A_Date_Page|is_time]]
 
* [[#A_Trackback|is_trackback]]
 
* [[#A_Date_Page|is_year]]
 
 
|}
 
|}
  
501行目: 547行目:
 
* [[Version 2.5|バージョン 2.5]] :  
 
* [[Version 2.5|バージョン 2.5]] :  
 
** <code>is_front_page</code>、<code>is_page_template</code> を追加。
 
** <code>is_front_page</code>、<code>is_page_template</code> を追加。
** いくつかの条件タグは、引数に配列を渡せるようになりました。
+
** いくつかの条件分岐タグは、引数に配列を渡せるようになりました。
 
* [[Version 2.3]] : [[#タグページ|タグページ]]用の <code>is_tag()</code> を追加。
 
* [[Version 2.3]] : [[#タグページ|タグページ]]用の <code>is_tag()</code> を追加。
 
* [[Version 2.1]] :  
 
* [[Version 2.1]] :  
** <code>is_home()</code> の動作が変わりました。[[Pages#Using_a_Page_as_the_Front_Page_.28version_2.1.2B_only.29|参照]]
+
** <code>is_home()</code> の動作が変わりました。[[Pages#Using a Page as the Front Page|参照]]
 
** <code>comments_open</code>、<code>pings_open</code> を追加。
 
** <code>comments_open</code>、<code>pings_open</code> を追加。
 
* バージョン確認中 :  
 
* バージョン確認中 :  
511行目: 557行目:
 
** <code>is_attachment()</code> を追加。
 
** <code>is_attachment()</code> を追加。
  
{{原文|Conditional Tags|70488}}<!-- 23:07, May 4, 2009 Bono 版 -->
+
{{原文|Conditional Tags|81276}}<!-- 20:27, 21 December 2009 Ramiy 版 -->
  
 
==関数リファレンス==
 
==関数リファレンス==
531行目: 577行目:
 
[[en:Conditional Tags]]
 
[[en:Conditional Tags]]
 
[[fr:Marqueurs conditionnels]]
 
[[fr:Marqueurs conditionnels]]
 +
[[tr:Koşul Etiketleri]]
 +
[[zh-hans:条件标签]]

2010年1月10日 (日) 10:21時点における版

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

この項目「条件分岐タグ」は、翻訳チェック待ちの項目です。加筆、訂正などを通して、Codex ドキュメンテーションにご協力下さい。

はじめに

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

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

条件の判定

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

メインページ

is_home() 
メインブログページが表示されている場合。
WordPress 2.1 以降では、この条件分岐タグの動作がそれまでのバージョンとは異なります。2.1 以前のフロントページ設定方法を参照してください。

注: 表示設定の「フロントページの表示」として「固定ページ」を設定している場合、このタグは「投稿ページ」を表示するときに true を返します。(次項参照)

フロントページ

is_front_page() 
サイトのフロントページが表示されている場合(投稿・ページにかかわらず)。
true を返すのは、表示設定の「トップページの表示」として
  • 「最新の投稿」を設定している場合には、メインブログページが表示されるとき
  • 「固定ページ (以下を選択)」を設定している場合には、「フロントページ」として選択したページが表示されるとき
注: この条件分岐タグは バージョン 2.5 で追加されました。

管理パネル

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

個別投稿ページ

is_single() 
個別記事のページが表示されている場合。
is_single('17') 
ID 17の記事が表示されている場合。
is_single('Irish Stew') 
"Irish Stew" というタイトルの記事が表示されている場合。
is_single('beef-stew') 
"beef-stew" という投稿スラッグの記事が表示されている場合。
is_single(array(17,'beef-stew','Irish Stew')) 
ID が 17、投稿スラッグが "beef-stew"、またはタイトルが "Irish Stew" のいずれかにあてはまる記事が表示されている場合。
is_single(array(17, 19, 1, 11))  
Returns true when the single post being displayed is either post ID 17, post ID 19, post ID 1, or post ID 11.
is_single(array('beef-stew', 'pea-soup', 'chili'))  
Returns true when the single post being displayed is either the post_name "beef-stew", post_name "pea-soup" or post_name "chili".
is_single(array('Beef Stew', 'Pea Soup', 'Chili'))  
Returns true when the single post being displayed is either the post_title "Beef Stew", post_title "Pea Soup" or post_title "Chili".

注: 配列を引数に使えるのは バージョン 2.5 以降からです。 This function does not distinguish between the post ID, post title, or post name. A post named "17" would be displayed if a post ID of 17 was requested.

先頭固定表示の投稿

is_sticky() 
投稿編集ページで「この投稿を先頭に固定表示」のチェックボックスがついている投稿が表示されている場合。もし ID 変数が指定されていない場合、投稿 ID は WordPress ループの投稿のものになる。
注: この条件分岐タグは バージョン 2.7 で追加されました。
is_sticky('17') 
ID 17 の投稿が先頭固定表示の場合、真を返す。

コメントポップアップ

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

記事を含むページ

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

WordPress ページ

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

is_page() 
ページが表示されている場合。
is_page('42') 
ID 42のページが表示されている場合。
is_page('About Me And Joe') 
"About Me And Joe"というタイトルのページが表示されている場合。
is_page('about-me') 
"about-me"という投稿スラッグのページが表示されている場合。
is_page(array(42,'about-me','About Me And Joe')) 
ID が 42、投稿スラッグが "about-me"、またはタイトルが "About Me And Joe" のいずれかにあてはまるページが表示されている場合。
注: 配列を引数に使えるのは バージョン 2.5 以降からです。

サブページかどうかをチェックする

残念ながら、is_subpage()というタグは今のところありませんが、対応策はあります。

Snippet 1

<?php
global $post;     // ループ外の場合

if ( is_page() && $post->post_parent ) {
    // サブページの場合
} else {
    // サブページではない場合
}
?>

You can create your own is_subpage() function using the code in Snippet 2. Add it to your functions.php file. It tests for a parent page in the same way as Snippet 1, but will return the ID of the page parent if there is one, or false if there isn't.

Snippet 2

function is_subpage() {
	global $post;                                 // load details about this page
        if ( is_page() && $post->post_parent ) {      // test to see if the page has a parent
               $parentID = $post->post_parent;        // the ID of the parent is this
               return $parentID;                      // return the ID
        } else {                                      // there is no parent so...
               return false;                          // ...the answer to the question is false
        };
};

It is advisable to use a function like that in Snippet 2, rather than using the simple test like Snippet 1, if you plan to test for sub pages frequently.

To test if the parent of a page is a specific page, for instance "About" (page id pid 2 by default), we can use the tests in Snippet 3. These tests check to see if we are looking at the page in question, as well as if we are looking at any child pages. This is useful for setting variables specific to different sections of a web site, so a different banner image, or a different heading.

Snippet 3

<?php

if ( is_page('about') || $post->post_parent == '2' ) {    
    // the page is "About", or the parent of the page is "About"
    $bannerimg = 'about.jpg';

} elseif ( is_page('learning') || $post->post_parent == '56' ) {	
    $bannerimg = 'teaching.jpg';

} elseif ( is_page('admissions') || $post->post_parent == '15' ) { 
    $bannerimg = 'admissions.jpg';

} else { 
    $bannerimg = 'home.jpg'; // just in case we are at an unclassified page, perhaps the home page
}	

?>

Snippet 4 is a function that allows you to carry out the tests above more easily. This function will return true if we are looking at the page in question (so "About") or one of its sub pages (so a page with a parent with ID "2").

Snippet 4

function is_tree($pid) {      // $pid = The ID of the page we're looking for pages underneath
	global $post;         // load details about this page
	if(is_page()&&($post->post_parent==$pid||is_page($pid))) 
               return true;   // we're at the page or at a sub page
	else 
               return false;  // we're elsewhere
};

Add Snippet 4 to your functions.php file, and call is_tree('id') to see if the current page is the page, or is a sub page of the page. In Snippet 3, is_tree('2') would replace "is_page('about') || $post->post_parent == '2'" inside the first if tag.

Note that if you have more than one level of pages the parent page is the one directly above and not the one at the very top of the hierarchy.

ページテンプレート

バージョン 2.5以降から、この条件分岐タグを使って特定のページテンプレートを使っているかどうかをチェックできるようになりました。

is_page_template() 
ページテンプレートが使われている場合。
is_page_template('about.php') 
"about" というページテンプレートが使われている場合。他の条件分岐タグとは違い、特定のテンプレートを選びたい場合には about.php などのファイル名を指定する必要があります。

カテゴリーページ

is_category() 
あるカテゴリーのアーカイブページが表示されている場合。
is_category('9') 
カテゴリーID 9のアーカイブページが表示されている場合。
is_category('Stinky Cheeses') 
"Stinky Cheeses"というカテゴリーのアーカイブページが表示されている場合。
is_category('blue-cheese') 
"blue-cheese"というカテゴリースラッグのアーカイブページが表示されている場合。
is_category(array(9,'blue-cheese','Stinky Cheeses')) 
投稿のカテゴリーが term_ID 9、スラッグが "blue-cheese" の場合、カテゴリー名が "Stinky Cheeses" のいずれかにあてはまる場合、真を返す。
注: 配列を引数に使えるのは バージョン 2.5 以降からです。
in_category('5') 
(注: in_category です。) 現在の記事がカテゴリーID 5に属する場合にtrueを返します。 詳細

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

タグページ

is_tag() 
タグのアーカイブページが表示されている場合。
is_tag('mild') 
'mild' というスラッグのついたタグのアーカイブページが表示されている場合。
is_tag(array('sharp','mild','extreme')) 
'sharp' または 'mild' または 'extreme' というスラッグのついたタグのアーカイブページが表示されている場合。
注: 配列を引数に使えるのは バージョン 2.5 以降からです。
has_tag() 
タグのある投稿がループ内で表示されている場合。: 注: これを引数に使えるのは バージョン 2.6 以降からです。
has_tag('mild') 
'mild' というタグのある投稿が表示されている場合。
has_tag(array('sharp','mild','extreme')) 
配列内のいずれかのタグのある投稿が表示されている場合。

is_archive()タグテンプレート/en も併せてお読み下さい。

A Taxonomy Page

is_tax() 
When any Taxonomy archive page is being displayed.
is_tax('mild') 
When the archive page for taxonomy with the slug of 'mild' is being displayed.
is_tax(array('sharp','mild','extreme')) 
Returns true when the taxonomy archive being displayed has a slug of either "sharp", "mild", or "extreme".

See also 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" という著者のアーカイブページを表示している場合。
注: 配列を引数に使えるのは バージョン 2.5 以降からです。

is_archive()著者テンプレート/en も併せてお読み下さい。

日付別ページ

is_date() 
日付別のアーカイブページのいずれかが表示されている場合。(例:月別、年別、日別、時間別)
is_year() 
年別のアーカイブページが表示されている場合。
is_month() 
月別のアーカイブページが表示されている場合。
is_day() 
日別のアーカイブページが表示されている場合。
is_time() 
毎時別、毎分別、毎秒別のアーカイブページが表示されている場合。

is_archive()も併せてお読み下さい。

アーカイブページ

is_archive() 
各アーカイブページが表示されている場合。アーカイブページには、カテゴリー、タグ、著者、日付別のものがあります。

検索結果ページ

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

404 Not Found ページ

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

複数にわたるページ

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

添付ファイルページ

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

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

is_singular() 
is_single()is_page()is_attachment() のいずれかが真である場合。

フィード

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

トラックバック

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

プレビュー

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

抜粋あり

has_excerpt() 
投稿に (手動で書かれた) 抜粋がある場合。
has_excerpt('42') 
投稿 ID 42 の投稿に抜粋がある場合。
<?php
//  もし関数内なら $post を取得
global $post;

if ( empty($post->post_excerpt) ) {
    // 投稿に抜粋がない場合
} else {
    // 投稿に抜粋がある場合
}
?>

ループ内

in_the_loop() 
ループ内の場合、真を返す。

サイドバー使用中

is_active_sidebar() 
指定したダイナミックサイドバーが使用中の場合、真を返す。サイドバー名、ID、番号を指定できる。
注: この条件分岐タグは バージョン 2.8 で追加されました。

動作サンプル

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

個別記事

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

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

Other example how to use Conditional Tags into loop. choose display content or excerpt in the index.php, when this is unique archive for display single post, categories, home and page.

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

日付別の表示

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

<?php
// WordPress ループを開始
if ( have_posts() ) : while ( have_posts() ) : the_post(); ?>
<h2 id="post-<?php the_ID(); ?>">
<a href="<?php the_permalink() ?>" rel="bookmark" title="Permanent Link to <?php the_title(); ?>">
<?php the_title(); ?></a></h2>
<small><?php the_time('Y/n/j') ?> <!-- by <?php the_author() ?> --></small>

<?php
// 日付別アーカイブページかどうかをチェック
if (is_date())
{
     if (date('Y') != get_the_date('Y'))
     {
          // 今年の記事ではない場合、"oldentry" クラスを追加してスタイルを変える
          echo '<div class="oldentry">';
     } else {
          echo '<div class="entry">';
     }
} else {
     echo '<div class="entry">';
}
the_content('続きを読む »'); 
?>
</div>

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

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

<!-- サイドバー開始 -->
<div id="sidebar">
<?php
// 表示中のページに合わせたサイドバーコンテンツを生成
if (is_home()) {
        // ホームページを表示している際、トップレベルカテゴリーの一覧を表示
        echo "<ul>";
        wp_list_cats('optionall=0&sort_column=name&list=1&children=0');
        echo "</ul>";
} elseif (is_category()) {
        // カテゴリーアーカイブページを表示している際、そのカテゴリー内のサブカテゴリーを含む一覧を表示
         echo "<ul>";
        wp_list_cats('optionall=1&sort_column=name&list=1&children=1&hierarchical=1');
        echo "</ul>";
} elseif (is_single()) {
        // 記事の固定リンクページを表示している際は何も表示させない
} elseif (is_page()) {
        // 固定ページを表示しています。どのページ?
        if (is_page('管理人について')) {
             // 「管理人について」ページ
             echo "<p>当ブログの管理人についての説明ページ。</p>";
        } elseif (is_page('ブログについて')) {
             echo "<p>当ブログについての説明ページ。</p>";
        } else {
              // その他の固定ページで表示させたいものがあればここに記入
        }
} else {
        // その他のページ(アーカイブページ、検索、404など)で表示させたいものがあればここに記入
} // 以上で終わりです!
?>
<form id="searchform" method="get" action="<?php echo $_SERVER['PHP_SELF']; ?>">
<div>
<input type="text" name="s" id="s" size="15" />
<input type="submit" value="<?php _e('Search'); ?>" />
</div>
</form>

</div>
<!-- end sidebar -->

分かりやすい 404 ページ

Creating an Error 404 Page という記事の サーバーが 404 ページを見つけるのを助ける というセクションに、PHP の条件分岐関数 isset() を使う例が書かれています。


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

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

In a theme's footer.php file

At times queries performed in other templates such as sidebar.php may corrupt certain conditional tags. For instance, in header.php a conditional tag works properly but doesn't work in a theme's footer.php. The trick is to put wp_reset_query before the conditional test in the footer. For example:

<?php
wp_reset_query();
if (is_page('2') ) {
echo 'this is page 2!';
} 
?>

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

アルファベット順一覧

変更履歴

  • 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()