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

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

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

提供: WordPress Codex 日本語版
移動先: 案内検索
(最新情報に更新(用例の差し替え・追加など)、未翻訳。「条件分岐タグ」に統一。メインページ・フロントページの説明を実際に合うよう修正。リンク切れ修正。)
(未翻訳部分を和訳,wp_reset_query コード追加)
1行目: 1行目:
{{NeedTrans|一部}}
 
 
{{CheckTrans}}
 
{{CheckTrans}}
 
{{テーマ・テンプレートガイド}}
 
{{テーマ・テンプレートガイド}}
100行目: 99行目:
 
残念ながら、<tt>is_subpage()</tt>というタグは今のところありませんが、対応策はあります。
 
残念ながら、<tt>is_subpage()</tt>というタグは今のところありませんが、対応策はあります。
  
'''Snippet 1'''
+
'''スニペット 1'''
 
<pre><?php
 
<pre><?php
 
global $post;    // ループ外の場合
 
global $post;    // ループ外の場合
111行目: 110行目:
 
?></pre>
 
?></pre>
  
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.
+
以下のように <tt>is_subpage()</tt> 関数を作ることもできます。[[テーマの作成#Theme Functions File|functions.php]] ファイルにこの関数を追加すればスニペット 1 のようにサブページかどうかをチェックすることができます。この関数は現在のページがサブページなら親ページの ID を、サブページでないなら <tt>false</tt> を返します。
  
'''Snippet 2'''
+
'''スニペット 2'''
 
<pre>
 
<pre>
 
function is_subpage() {
 
function is_subpage() {
global $post;                                // load details about this page
+
global $post;                                // $post には現在の固定ページの情報があります
         if ( is_page() && $post->post_parent ) {      // test to see if the page has a parent
+
         if ( is_page() && $post->post_parent ) {      // 現在の固定ページが親ページを持つかどうかをチェックします
               $parentID = $post->post_parent;        // the ID of the parent is this
+
               $parentID = $post->post_parent;        // 親ページの ID を取得します
               return $parentID;                      // return the ID
+
               return $parentID;                      // 親ページの ID を返します
         } else {                                      // there is no parent so...
+
         } else {                                      // 親ページを持たないので...
               return false;                          // ...the answer to the question is false
+
               return false;                          // ...false を返します
 
         };
 
         };
 
};
 
};
 
</pre>
 
</pre>
  
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.
+
サブページかどうかのチェックを頻繁にする予定なら、スニペット 1 よりも スニペット 2 のように関数にして利用する方が便利です。
  
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.
+
現在のページの親ページが特定の固定ページ、例えば "紹介"(デフォルトでページ ID は 2)かどうかをチェックするならスニペット 3 のようにチェックできます。この方法は、指定したページであるか、またはそのサブページであるかをチェックします。サイトのセクションごとに異なった変数(バナーや見出しなど)を設定するのに便利です。
  
'''Snippet 3'''
+
'''スニペット 3'''
 
<pre>
 
<pre>
 
<?php
 
<?php
  
 
if ( is_page('about') || $post->post_parent == '2' ) {     
 
if ( is_page('about') || $post->post_parent == '2' ) {     
     // the page is "About", or the parent of the page is "About"
+
     // このページは "紹介"、または親ページが "紹介"
 
     $bannerimg = 'about.jpg';
 
     $bannerimg = 'about.jpg';
  
145行目: 144行目:
  
 
} else {  
 
} else {  
     $bannerimg = 'home.jpg'; // just in case we are at an unclassified page, perhaps the home page
+
     $bannerimg = 'home.jpg'; // 上のどれにも当てはまらないページ(たぶんホームページ)
 
}
 
}
  
151行目: 150行目:
 
</pre>
 
</pre>
  
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").
+
スニペット 4 はスニペット 3 のチェックをより簡単に実現する関数です。この関数は指定したページ('紹介' など)またはそのサブページ(親ページの ID が 2)であれば true を返します。
  
'''Snippet 4'''
+
'''スニペット 4'''
 
<pre>
 
<pre>
function is_tree($pid) {      // $pid = The ID of the page we're looking for pages underneath
+
function is_tree($pid) {      // $pid = 指定したページの ID
global $post;        // load details about this page
+
global $post;        // $post には現在の固定ページの情報があります
 
if(is_page()&&($post->post_parent==$pid||is_page($pid)))  
 
if(is_page()&&($post->post_parent==$pid||is_page($pid)))  
               return true;  // we're at the page or at a sub page
+
               return true;  // 指定したページ、またはそのサブページです
 
else  
 
else  
               return false;  // we're elsewhere
+
               return false;  // 別のページです
 
};
 
};
 
</pre>
 
</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.
+
スニペット 4 [[テーマの作成#Theme Functions File|functions.php]] ファイルに追加して、<tt>is_tree('id')</tt> を実行すると現在のページが指定したページ、またはそのサブページであるかどうかがわかります。例えば、スニペット 3 の始めの if ブロック内にある "<tt>is_page('about') || $post->post_parent == '2'</tt>" <tt>is_tree('2')</tt> に置き換えられます。
  
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階層以上のページ階層がある場合は、親ページは現在より1階層上のページを差します。ページ階層の最上にあるページではないことに注意してください。
  
 
<div id="Is_a_Page_Template">
 
<div id="Is_a_Page_Template">
205行目: 204行目:
  
 
<div id="A_Taxonomy_Page">
 
<div id="A_Taxonomy_Page">
=== A Taxonomy Page ===
+
=== タクソノミーページ ===
 
</div>
 
</div>
  
; <tt>is_tax()</tt> : When any Taxonomy archive page is being displayed.
+
; <tt>is_tax()</tt> : タクソノミーのアーカイブページが表示されている場合。
; <tt>is_tax('mild')</tt> : When the archive page for taxonomy with the slug of 'mild' is being displayed.
+
; <tt>is_tax('mild')</tt> : 'mild' というスラッグのついたタクソノミーのアーカイブページが表示されている場合。
; <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".
+
; <tt>is_tax(array('sharp','mild','extreme'))</tt> : 'sharp' または 'mild' または 'extreme' というスラッグのついたタクソノミーのアーカイブページが表示されている場合。
  
See also <tt>[[#Any Archive Page|is_archive()]]</tt>.
+
<tt>[[#Any Archive Page|is_archive()]]</tt>も併せてお読み下さい。
  
 
<div id="An_Author_Page">
 
<div id="An_Author_Page">
340行目: 339行目:
 
</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>
 
<pre>
481行目: 480行目:
  
 
<div id="In_a_theme.27s_footer.php_file">
 
<div id="In_a_theme.27s_footer.php_file">
===In a theme's footer.php file===
+
===テーマの footer.php ファイルで===
 
</div>
 
</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:
+
sidebar.php などの他のテンプレートファイルによってクエリが実行された場合、元の条件分岐タグは破損してしまいます。例えば、header.php では条件分岐タグが適切に機能するのに、footer.php では正しく機能しないトラブルがよくあります。これを解決するにはフッターで条件分岐タグを使う前に ''wp_reset_query'' を実行します:
  
 
<pre>
 
<pre>
491行目: 490行目:
 
echo 'this is page 2!';
 
echo 'this is page 2!';
 
}  
 
}  
 +
?>
 +
</pre>
 +
 +
このようなトラブルを無くすために、別の場所(テンプレートファイルやプラグイン)でクエリを実行した場合は、必要な処理を終えた後に必ず ''wp_reset_query'' を実行するようにしましょう。
 +
 +
<pre>
 +
<?php
 +
query_posts('posts_per_page=5&cat=123');
 +
if(have_posts()) :
 +
  while(have_posts()) :
 +
    the_posts();
 +
    /* 投稿を出力するなどの処理... */
 +
  endwhile;
 +
else :
 +
  /* 該当する投稿がない場合、何もしない */
 +
endif;
 +
wp_reset_query();
 
?>
 
?>
 
</pre>
 
</pre>

2010年4月15日 (木) 21:43時点における版

この項目「条件分岐タグ」は、翻訳チェック待ちの項目です。加筆、訂正などを通して、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()というタグは今のところありませんが、対応策はあります。

スニペット 1

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

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

以下のように is_subpage() 関数を作ることもできます。functions.php ファイルにこの関数を追加すればスニペット 1 のようにサブページかどうかをチェックすることができます。この関数は現在のページがサブページなら親ページの ID を、サブページでないなら false を返します。

スニペット 2

function is_subpage() {
	global $post;                                 // $post には現在の固定ページの情報があります
        if ( is_page() && $post->post_parent ) {      // 現在の固定ページが親ページを持つかどうかをチェックします
               $parentID = $post->post_parent;        // 親ページの ID を取得します
               return $parentID;                      // 親ページの ID を返します
        } else {                                      // 親ページを持たないので...
               return false;                          // ...false を返します
        };
};

サブページかどうかのチェックを頻繁にする予定なら、スニペット 1 よりも スニペット 2 のように関数にして利用する方が便利です。

現在のページの親ページが特定の固定ページ、例えば "紹介"(デフォルトでページ ID は 2)かどうかをチェックするならスニペット 3 のようにチェックできます。この方法は、指定したページであるか、またはそのサブページであるかをチェックします。サイトのセクションごとに異なった変数(バナーや見出しなど)を設定するのに便利です。

スニペット 3

<?php

if ( is_page('about') || $post->post_parent == '2' ) {    
    // このページは "紹介"、または親ページが "紹介"
    $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'; // 上のどれにも当てはまらないページ(たぶんホームページ)
}	

?>

スニペット 4 はスニペット 3 のチェックをより簡単に実現する関数です。この関数は指定したページ('紹介' など)またはそのサブページ(親ページの ID が 2)であれば true を返します。

スニペット 4

function is_tree($pid) {      // $pid = 指定したページの ID
	global $post;         // $post には現在の固定ページの情報があります
	if(is_page()&&($post->post_parent==$pid||is_page($pid))) 
               return true;   // 指定したページ、またはそのサブページです
	else 
               return false;  // 別のページです
};

スニペット 4 を functions.php ファイルに追加して、is_tree('id') を実行すると現在のページが指定したページ、またはそのサブページであるかどうかがわかります。例えば、スニペット 3 の始めの if ブロック内にある "is_page('about') || $post->post_parent == '2'" は is_tree('2') に置き換えられます。

注意:2階層以上のページ階層がある場合は、親ページは現在より1階層上のページを差します。ページ階層の最上にあるページではないことに注意してください。

ページテンプレート

バージョン 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 も併せてお読み下さい。

タクソノミーページ

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

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() . 'カテゴリーに属しています';
}

以下の例は、現在表示しているページによって本文を表示するか抜粋を表示するかを切り替えます。

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() を使う例が書かれています。


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

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

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

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

<?php
wp_reset_query();
if (is_page('2') ) {
echo 'this is page 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()