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

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

条件分岐タグ

提供: WordPress Codex 日本語版
2008年3月31日 (月) 04:04時点におけるBono (トーク | 投稿記録)による版 (WP2.5 : is_front_page, is_page_template の追加、引数の配列対応 (2008年3月13日 (木) 02:44 MichaelH 版を反映))

移動先: 案内検索

 条件タグ(Conditional Tag)はテンプレートファイル内で表示される内容、表示させる対象ページを設定するのに使います。例えば、ブログのホームページの上部に短文を表示させたいとしましょう。is_home()を使うことによって、その作業量は軽減できます。

 これらのタグはTemplate Hierarchyと近い関係にあります。

The Conditions For...

 条件タグはその状況下であるかをチェックし、TRUE もしくは FALSE を返します。


メインページ

is_home() 
メインページ(ブログのホームページ)が表示されている場合。(WordPress 2.1 handles this function differently than prior versions. See static Front Page.)

The Front Page

is_front_page() 
When it is the front of the site displayed, whether it is posts or a Page. Returns true when the main blog page is being displayed and the 'Settings->Reading->Front page displays' is set to "Your latest posts", or when 'Settings->Reading->Front page displays' is set to "A static page" and the "Front Page" value is the current Page being displayed. Note: this tag was added at Version 2.5.

管理パネル

is_admin()
When the Dashboard or the administration panels are being displayed.

A Single Post Page

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')) 
Returns true when the single post being displayed is either post ID 17, or the post_name is "beef-stew", or the post_title is "Irish Stew". Note: the array ability was added at Version 2.5.

Any Page Containing Posts

comments_open()
When comments are allowed for the current Post being processed in the WordPress Loop.
pings_open()
When pings are allowed for the current Post being processed in the WordPress Loop.

「ページ」ページ

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

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')) 
Returns true when the Pages displayed is either post ID 42, or post_name "about-me", or post_title "About Me And Joe". Note: the array ability was added at Version 2.5.

Testing for sub-Pages

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

<?php
// Get $post if you're inside a function
global $post;

if (is_page() && $post->post_parent ) {
	// This is a subpage
} else {
	// This is not a subpage
}
?>

If you need to test whether this is a particular page OR a child of that page (e.g. to present a different banner on different sections of a page-based site), get the parent page IDs from the back-end, then use code like this:

<?php

if 	(is_page(about) || $post->post_parent=="2") { 
	$bannerimg="home.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" ; // Fall-through  
}	

?>

Is a Page Template

Beginning with Version 2.5 this allows you to determine whether or not you are in a page template or if a specific page template is being used.

is_page_template() 
Is a Page Template being used?
is_page_template('about') 
Is Page Template 'about' being used?

カテゴリーページ

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')) 
Returns true when the category of posts being displayed is either term_ID 9, or slug "blue-cheese", or name "Stinky Cheeses". Note: the array ability was added at Version 2.5.
in_category('5') 
(注: in_category です。) 現在の記事がカテゴリーID 5に属する場合にtrueを返します。 詳細

is_archive()Category Templates/enも参照してください。

タグページ

is_tag() 
When any Tag archive page is being displayed.
is_tag('mild') 
When the archive page for tag with the slug of 'mild' is being displayed.
is_tag(array('sharp','mild','extreme')) 
Returns true when the tag archive being displayed has a slug of either "sharp", "mild", or "extreme". Note: the array ability was added at Version 2.5.

See also is_archive() and Tag Templates/en.

著者ページ

is_author() 
ある著者のアーカイヴページが表示されている場合
is_author('4') 
ID 4 の著者のアーカイヴページを表示している場合
is_author('Vivian') 
ニックネームが"Vivian"のアーカイヴページを表示している場合
is_author('john-jones') 
When the archive page for the Author with Nicename "john-jones" is being displayed.
is_author(array(4,'john-jones','Vivian')) 
When the archive page for the author is either user ID 4, or user_nicename "john-jones", or nickname "Vivian". Note: the array ability was added at Version 2.5.

is_archive()Author Templates/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"エラーページが表示されている場合

A Paged Page

is_paged() 
When the page being displayed is "paged". This refers to an archive or the main page being split up over several pages. This does not refer to a Post or Page whose content has been divided into pages using the <!--nextpage--> QuickTag.

An Attachment

is_attachment() 
When an attachment document to a post or Page is being displayed. An attachment is an image or other file uploaded through the post editor's upload utility. Attachments can be displayed on their own 'page' or template. For more information, see Using Image and File Attachments/en.

A Syndication

is_feed() 
When the site requested is a Syndication/en. This tag is not typically used by users; it is used internally by WordPress and is available for Plugin Developers.

トラックバック

is_trackback() 
フックの中にトラックバックの機構が組み込まれている場合
このタグは一般のユーザーの為のものでは無く、WordPress内部で使われるものであり、プラグイン開発の際に使用されます。

プレビュー

is_preview() 
When a single post being displayed is viewed in Draft mode.

Has An Excerpt

!empty($post->post_excerpt) 
There is no built-in way to check if a post has an excerpt, but you can use the above code in the same way. Remove the '!' to emulate 'has_no_excerpt'.

Working Examples

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

Single Post

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

if (is_single())
{
     echo 'This is just one of many fabulous entries in the ' . single_cat_title() . ' category!';
}

Date-Based Differences

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

<?php
// this starts The Loop
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('F jS, Y') ?> <!-- by <?php the_author() ?> --></small>

<?php
// are we showing a date-based archive?
if (is_date())
{
     if (date('Y') != get_the_date('Y'))
     {
          // this post was written in a previous year
          // so let's style the content using the "oldentry" class
          echo '<div class="oldentry">';
     } else {
          echo '<div class="entry">';
     }
} else {
     echo '<div class="entry">';
}
the_content('Read the rest of this entry »'); 
?>
</div>

Variable Sidebar Content

以下の例は、アクセス中のページによってサイドバーに表示させる内容を変更させます。

<!-- begin sidebar -->
<div id="sidebar">
<?php
// let's generate info appropriate to the page being displayed
if (is_home()) {
        // we're on the home page, so let's show a list of all top-level categories
        echo "<ul>";
        wp_list_cats('optionall=0&sort_column=name&list=1&children=0');
        echo "</ul>";
} elseif (is_category()) {
        // we're looking at a single category view, so let's show _all_ the categories
         echo "<ul>";
        wp_list_cats('optionall=1&sort_column=name&list=1&children=1&hierarchical=1');
        echo "</ul>";
} elseif (is_single()) {
        // we're looking at a single page, so let's not show anything in the sidebar
} elseif (is_page()) {
        // we're looking at a static page.  Which one?
        if (is_page('About')) {
             // our about page.
             echo "<p>This is my about page!</p>";
        } elseif (is_page('Colophon')) {
             echo "<p>This is my colophon page, running on WordPress " . bloginfo('version') . "</p>";
        } else {
              // catch-all for other pages
              echo "<p>Vote for Pedro!</p>";
        }
} else {
        // catch-all for everything else (archives, searches, 404s, etc)
        echo "<p>Pedro offers you his protection.</p>";
} // That's all, folks!
?>
<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 -->

Helpful 404 page

来訪者にとって404エラーページは不快で役立たずなものでしか在りません。WordPressでは、404ページをもっと役に立つページにすることが出来ます。例えば、ユーザーが存在しないページをクリックした時にメールで通知する方法です。これを使うときには、メールアドレスの設定を忘れずに行ってください。

<p>You 
<?php
#some variables for the script to use
#if you have some reason to change these, do.  but wordpress can handle it
$adminemail = get_bloginfo('admin_email'); #the administrator email address, according to wordpress
$website = get_bloginfo('url'); #gets your blog's url from wordpress
$websitename = get_bloginfo('name'); #sets the blog's name, according to wordpress

  if (!isset($_SERVER['HTTP_REFERER'])) {
    #politely blames the user for all the problems they caused
        echo "tried going to "; #starts assembling an output paragraph
	$casemessage = "All is not lost!";
  } elseif (isset($_SERVER['HTTP_REFERER'])) {
    #this will help the user find what they want, and email me of a bad link
	echo "clicked a link to"; #now the message says You clicked a link to...
        #setup a message to be sent to me
	$failuremess = "A user tried to go to $website"
        .$_SERVER['REQUEST_URI']." and received a 404 (page not found) error. ";
	$failuremess .= "It wasn't their fault, so try fixing it.  
        They came from ".$_SERVER['HTTP_REFERER'];
	mail($adminemail, "Bad Link To ".$_SERVER['REQUEST_URI'],
        $failuremess, "From: $websitename <noreply@$website>"); #email you about problem
	$casemessage = "An administrator has been emailed 
        about this problem, too.";#set a friendly message
  }
  echo " ".$website.$_SERVER['REQUEST_URI']; ?> 
and it doesn't exist. <?php echo $casemessage; ?>  You can click back 
and try again or search for what you're looking for:
  <?php include(TEMPLATEPATH . "/searchform.php"); ?>
</p>

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

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

変更履歴

  • Version 2.5 :
    • is_front_pageis_page_template を追加。
    • いくつかの条件タグは、引数に配列を渡せるようになりました。
  • Version 2.3 : タグページ用の is_tag() を追加
  • Version 2.1 : is_home() の動作が変わりました。参照
  • バージョン確認中 :
    • is_preview() を追加。
    • is_admin() を追加。
    • comments_openpings_open を追加。
    • is_attachment() を追加。

最新英語版: WordPress Codex » Conditional Tags最新版との差分

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


関数リファレンステンプレートタグ目次もご覧ください。