- 条件タグの使用場所
- 条件のための
- メインページ
- フロントページ
- 管理パネル
- 単一投稿ページ
- 単一投稿、ページ、または添付ファイル
- スティッキーポスト
- 投稿タイプ
- 投稿タイプが階層的である
- 投稿タイプアーカイブ
- 投稿を含む任意のページ
- 「ページ」ページ
- ページテンプレートかどうか
- カテゴリページ
- タグページ
- タクソノミーページ
- 登録されたタクソノミー
- 著者ページ
- マルチ著者サイト
- 日付ページ
- 任意のアーカイブページ
- 検索結果ページ
- 404ページが見つかりません
- プライバシーポリシーページ
- 添付ファイル
- 単一ページ、単一投稿または添付ファイル
- シンジケーション
- トラックバック
- プレビュー
- 抜粋がある
- ナビメニューが割り当てられているか
- ループ内
- サイドバーがアクティブか
- ネットワークの一部(マルチサイト)
- メインサイト(マルチサイト)
- ネットワークの管理者(マルチサイト)
- アクティブなプラグイン
- 子テーマ
- テーマが機能をサポートしているか
- 動作例
- 条件タグインデックス
- 関数リファレンス
条件タグの使用場所
条件タグがデータを変更するためには、情報がすでにデータベースから取得されている必要があります。つまり、クエリはすでに実行されている必要があります。データがない状態で条件タグを使用すると、if/else文に対して尋ねるものが何もありません。
WordPressはfunctions.php
をクエリが実行される前に読み込むため、そのファイルに単に条件タグを含めるだけでは機能しません。
条件タグを実装する方法は2つあります:
- テンプレートファイルに配置する
functions.php
でアクション/フィルターにフックする関数を作成する
条件のための
以下に、各条件文が真である条件を示します。パラメータを受け入れることができるタグが記載されています。
メインページ
この条件は、メインブログページが表示されているときに真を返します。通常、標準の逆時系列順で表示されます。ホームページが静的ページに設定されている場合、この条件は「投稿ページ」として設定したページでのみ真になります。
フロントページ
この条件は、サイトのフロントページが表示されているときに真を返します。投稿を表示するように設定されているか、静的ページを表示するように設定されているかに関係なく。
真を返す条件:
- 1. メインブログページが表示されているかつ
- 2. 設定 > 読み込み - フロントページ表示オプションが「最新の投稿」に設定されている
または
管理パネル
この条件は、ダッシュボードまたは管理パネルが表示されているときに真を返します。
単一投稿ページ
任意の単一投稿(または添付ファイル、またはカスタム投稿タイプ)が表示されているときに真を返します。この条件は、ページにいる場合は偽を返します。
is_single( '17' );
is_single()は、IDや他のパラメータによって特定の投稿をチェックすることもできます。上記の例は、投稿17が単一投稿として表示されているときに真になります。
is_single( 'Irish Stew' );
パラメータには投稿タイトルも含まれます。この場合、「Irish Stew」というタイトルの投稿が単一投稿として表示されているときに真になります。
is_single( 'beef-stew' );
「beef-stew」という投稿スラッグの投稿が単一投稿として表示されているときに真になります。
is_single( array( 17, 'beef-stew', 'Irish Stew' ) );
表示されている単一投稿が投稿ID17であるか、投稿名が「beef-stew」であるか、投稿タイトルが「Irish Stew」であるときに真になります。
is_single( array( 17, 19, 1, 11 ) );
表示されている単一投稿が投稿ID = 17、投稿ID = 19、投稿ID = 1、または投稿ID = 11であるときに真になります。
is_single( array( 'beef-stew', 'pea-soup', 'chilli' ) );
表示されている単一投稿が投稿名「beef-stew」、投稿名「pea-soup」、または投稿名「chilli」であるときに真になります。
is_single( array( 'Beef Stew', 'Pea Soup', 'Chilli' ) );
表示されている単一投稿が投稿タイトル「Beef Stew」、投稿タイトル「Pea Soup」、または投稿タイトル「Chilli」であるときに真になります。
注意:この関数は、投稿ID、投稿タイトル、または投稿名を区別しません。「17」という名前の投稿は、投稿IDが17の投稿が要求された場合に表示されます。おそらく、スラッグ「17」の投稿にも同様のことが当てはまります。
単一投稿、ページ、または添付ファイル
任意のis_single、is_page、およびis_attachmentに対して真を返します。投稿タイプのテストも可能です。
スティッキーポスト
「この投稿をフロントページに固定する」チェックボックスが現在の投稿に対してチェックされている場合、真を返します。この例では、投稿ID引数は指定されていないため、ループ投稿の投稿IDが使用されます。
is_sticky( '17' );
投稿17がスティッキーポストと見なされるときに真を返します。
投稿タイプ
現在の投稿が特定のタイプであるかどうかを確認するには、条件にget_post_type()を含めることができます。これは本当に条件タグではありませんが、現在の投稿の登録された投稿タイプを返します。
if ( 'book' == get_post_type() ) { ... }
指定された投稿タイプが登録された投稿タイプである場合、真を返します。これは、投稿が特定の投稿タイプであるかどうかをテストするものではありません。注意:この関数は、3.0開発で一時的に存在したis_post_typeという関数を置き換えます。
投稿タイプが階層的である
is_post_type_hierarchical( $post_type )
この$post_typeが登録時に階層サポートで設定されている場合、真を返します。
is_post_type_hierarchical( 'book' );
書籍投稿タイプが階層サポートを持つように登録されている場合、真を返します。
投稿タイプアーカイブ
任意の投稿タイプアーカイブで真を返します。
is_post_type_archive( $post_type );
$post_typeに一致する投稿タイプアーカイブページにいる場合、真を返します(単一の投稿タイプまたは投稿タイプの配列である可能性があります)。
投稿タイプアーカイブを有効にするには、投稿タイプを登録する際に‘has_archive’ => trueを使用します。
投稿を含む任意のページ
現在処理中の投稿に対してコメントが許可されている場合。
「ページ」ページ
このセクションは、WordPressページ、つまりブログの一般的なウェブページではなく、組み込みのpost_type「page」を指します。
任意のページが表示されているとき。
is_page( '42' );
ページ42(ID)が表示されているとき。
is_page( 'About Me And Joe' );
「About Me And Joe」というpost_titleのページが表示されているとき。
is_page( 'about-me' );
「about-me」というpost_name(スラッグ)のページが表示されているとき。
is_page( array( 42, 'about-me', 'About Me And Joe' ) );
表示されているページがpost ID = 42、またはpost_nameが「about-me」、またはpost_titleが「About Me And Joe」のいずれかであるときに真を返します。
is_page( array( 42, 54, 6 ) );
表示されているページがpost ID = 42、またはpost ID = 54、またはpost ID = 6のいずれかであるときに真を返します。
ページネーションされたページのテスト
このコードを使用して、投稿またはページが<!--nextpage-->
QuickTagを使用してページに分割されているnページにいるかどうかを確認できます。これは、たとえば、複数のページに分割された投稿の最初のページにのみメタデータを表示したい場合に便利です。
例1
<?php
$paged = $wp_query->get( 'page' );
if ( ! $paged || $paged < 2 ) :
// This is not a paginated page (or it's simply the first page of a paginated page/post)
else :
// This is a paginated page.
endif;
例2
<?php
$paged = get_query_var( 'page' ) ? get_query_var( 'page' ) : false;
if ( $paged == false ) :
// This is not a paginated page (or it's simply the first page of a paginated page/post)
else :
// This is a paginated page.
endif;
サブページのテスト
``````bash
<?php
global $post; // if outside the loop
if ( is_page() && $post->post_parent ) :
// This is a subpage
else :
// This is not a subpage
endif;
`
スニペット1
スニペット2のコードを使用して独自のis_subpage()関数を作成できます。functions.phpファイルに追加します。これは、スニペット1と同様に親ページをテストしますが、親ページがある場合はそのIDを返し、ない場合は偽を返します。
スニペット2
<?php
function is_subpage() {
// Load details about this page.
global $post;
// Test to see if the page has a parent
if ( is_page() && $post->post_parent ) {
// return the ID of the parent post
return $post->post_parent;
// there is no parent so ...
} else {
// ... the answer to the question is false
return false;
}
}
頻繁にサブページをテストする予定がある場合は、スニペット1のような単純なテストを使用するのではなく、スニペット2のような関数を使用することをお勧めします。
特定のページの親が「About」(デフォルトでページIDは2)であるかどうかをテストするには、スニペット3のテストを使用できます。これらのテストは、問題のページを見ているかどうか、または子ページを見ているかどうかを確認します。これは、ウェブサイトの異なるセクションに特有の変数を設定するのに便利です。異なるバナー画像や異なる見出しを設定できます。
スニペット3
<?php
// The page is "About", or the parent of the page is "About".
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';
// Just in case we are at an unclassified page, perhaps the home page
} else {
$bannerimg = 'home.jpg';
}
スニペット4は、上記のテストをより簡単に実行できる関数です。この関数は、問題のページ(「About」)またはそのサブページのいずれかを見ている場合に真を返します。
スニペット4
スニペット4をfunctions.phpファイルに追加し、is_tree( ‘id’ )を呼び出して、現在のページがそのページであるか、またはそのページのサブページであるかを確認します。スニペット3では、is_tree( ‘2’ )が最初のifタグ内の「is_page( ‘about’ ) || ‘2’ == $post->post_parent」を置き換えます。
ページが複数のレベルにわたる場合、親ページは直接上のページであり、階層の最上部のページではないことに注意してください。
ページテンプレートかどうか
ページテンプレートにいるか、特定のページテンプレートが使用されているかどうかを判断できます。
ページテンプレートが使用されていますか?
is_page_template( 'about.php' );
ページテンプレート「about」が使用されていますか?他の条件とは異なり、特定のページテンプレートを指定する場合は、about.phpやmy_page_template.phpのようにファイル名を使用する必要があります。
注意:ファイルがサブディレクトリにある場合は、これも含める必要があります。つまり、これはテーマに対するファイルパスとファイル名の両方である必要があります。たとえば、「page-templates/about.php」のようになります。
カテゴリページ
カテゴリアーカイブページが表示されているとき。
is_category( '9' );
カテゴリ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' );
現在の投稿が指定されたカテゴリIDにある場合、真を返します。
in_category( array( 1, 2, 3 ) );
現在の投稿がカテゴリ1、2、または3のいずれかにある場合、真を返します。
! in_category( array( 4, 5, 6 ) );
現在の投稿がカテゴリ4、5、または6のいずれかにない場合、真を返します。最初の「!」に注意してください。
注意:テストする際は、スペルを確認してください。「is」と「in」には大きな違いがあります。
is_archive()およびカテゴリテンプレートも参照してください。
タグページ
任意のタグアーカイブページが表示されているとき。
is_tag( 'mild' );
スラッグ「mild」のタグのアーカイブページが表示されているとき。
is_tag( array( 'sharp', 'mild', 'extreme' ) );
表示されているタグアーカイブが「sharp」、「mild」、または「extreme」のいずれかのスラッグを持っているときに真を返します。
has_tag();
現在の投稿にタグがあるとき。ループ内で使用する必要があります。
has_tag( 'mild' );
現在の投稿に「mild」というタグがあるとき。
has_tag( array( 'sharp', 'mild', 'extreme' ) );
現在の投稿に配列内のいずれかのタグがあるとき。
is_archive()およびタグテンプレートも参照してください。
タクソノミーページ
任意のタクソノミーアーカイブページが表示されているとき。
is_tax( 'flavor' );
フレーバータクソノミーのアーカイブページが表示されているとき。
is_tax( 'flavor', 'mild');
スラッグ「mild」のフレーバータクソノミーのアーカイブページが表示されているとき。
is_tax( 'flavor', array( 'sharp', 'mild', 'extreme' ) );
表示されているフレーバータクソノミーアーカイブが「sharp」、「mild」、または「extreme」のいずれかのスラッグを持っているときに真を返します。
現在の投稿が指定された用語のいずれかを持っているかどうかを確認します。最初のパラメータは空の文字列である必要があります。2番目のパラメータにはタクソノミースラッグ/名前が必要です。
has_term( 'green', 'color' );
現在の投稿が「color」タクソノミーの「green」用語を持っているとき。
has_term( array( 'green', 'orange', 'blue' ), 'color' );
現在の投稿が配列内のいずれかの用語を持っているとき。
is_archive()も参照してください。
登録されたタクソノミー
特定のタクソノミーがregister_taxonomy()を介して登録されているとき。以前はis_taxonomy()で、バージョン3.0で非推奨になりました。
著者ページ
任意の著者ページが表示されているとき。
is_author( '4' );
著者番号(ID)4のアーカイブページが表示されているとき。
is_author( 'Vivian' );
ニックネーム「Vivian」の著者のアーカイブページが表示されているとき。
is_author( 'john-jones' );
ニックネーム「john-jones」の著者のアーカイブページが表示されているとき。
is_author( array( 4, 'john-jones', 'Vivian' ) );
著者のアーカイブページがユーザーID 4、またはuser_nicename「john-jones」、またはニックネーム「Vivian」のいずれかであるとき。
is_archive()および著者テンプレートも参照してください。
マルチ著者サイト
1人以上の著者がサイトに投稿を公開しているとき。バージョン3.2で利用可能。
日付ページ
任意の日付ベースのアーカイブページが表示されているとき(すなわち、月次、年次、日次、または時間ベースのアーカイブ)。
年次アーカイブが表示されているとき。
月次アーカイブが表示されているとき。
日次アーカイブが表示されているとき。
時間、分、または秒単位のアーカイブが表示されているとき。
今日が投稿日付に基づいて新しい日である場合。ループ内で使用する必要があります。
任意のアーカイブページ
任意のタイプのアーカイブページが表示されているとき。カテゴリ、タグ、著者、日付ベースのページはすべてアーカイブのタイプです。
検索結果ページ
404ページが見つかりません
「HTTP 404: 見つかりません」エラーが発生した後にページが表示されるとき。
プライバシーポリシーページ
添付ファイル
投稿またはページに添付されたドキュメントが表示されているとき。添付ファイルは、投稿エディタのアップロードユーティリティを介してアップロードされた画像やその他のファイルです。添付ファイルは、独自の「ページ」またはテンプレートで表示できます。
単一ページ、単一投稿または添付ファイル
次のいずれかが真であるとき:is_single()
、is_page()
またはis_attachment()
。
is_singular( 'book' );
カスタム投稿タイプの書籍の投稿を表示しているときに真になります。
is_singular( array( 'newspaper', 'book' ) );
カスタム投稿タイプの新聞または書籍の投稿を表示しているときに真になります。
シンジケーション
要求されたサイトがシンジケーションであるとき。このタグは通常、ユーザーによって使用されることはなく、WordPressによって内部的に使用され、プラグイン開発者に利用可能です。
トラックバック
要求されたサイトがWordPressのトラックバックエンジンにフックされているとき。このタグは通常、ユーザーによって使用されることはなく、WordPressによって内部的に使用され、プラグイン開発者に利用可能です。
プレビュー
表示されている単一投稿がドラフトモードで表示されているとき。
抜粋がある
現在の投稿に抜粋があるとき
has_excerpt( 42 )
投稿42(ID)に抜粋があるとき。
<?php
// Get $post if you're inside a function global $post;
if ( empty( $post->post_excerpt ) ) {
// This post has no excerpt
} else {
// This post has excerpt
}
その他の使用
自動表示された抜粋を隠し、投稿の抜粋のみを表示する必要があるとき。
<?php
if ( ! has_excerpt() ) {
echo '';
} else {
the_excerpt();
}
自動抜粋をテキストまたはコードに置き換えます。
<?php if ( ! has_excerpt() ) {
// your text or code
}
ナビメニューが割り当てられているか
登録されたナビメニューの場所にメニューが割り当てられているかどうか
返す:割り当てられた(true)またはそうでない(false)
ループ内
「ループ内」にいるかどうかを確認します。プラグイン作成者にとって便利で、この条件はループ内にいるときに真を返します。
サイドバーがアクティブか
特定のサイドバーがアクティブ(使用中)かどうかを確認します。サイドバー(名前、ID、または番号で識別される)が使用中である場合は真を返し、そうでない場合は偽を返します。
ネットワークの一部(マルチサイト)
現在のサイトがWordPressマルチサイトインストールにあるかどうかを確認します。
メインサイト(マルチサイト)
ネットワーク内のサイトがメインサイトであるかどうかを判断します。
ネットワークの管理者(マルチサイト)
ユーザーがネットワーク(スーパ)管理者であるかどうかを判断します。
アクティブなプラグイン
子テーマ
テーマが機能をサポートしているか
動作例
単一投稿
この例は、単一投稿ページを表示しているときにのみ特定のものを表示するためにis_single()
を使用する方法を示しています:
<?php
if ( is_single() ) {
echo 'This is just one of many fabulous entries in the ' . single_cat_title() . ' category!';
}
ループ内で条件タグを使用する別の例。これが単一投稿またはホームページの表示であるときにindex.phpでコンテンツまたは抜粋を表示することを選択します。
<?php
if ( is_home() || is_single() ) {
the_content();
} else {
the_excerpt();
}
ホームページではない場所でコードや要素を表示する必要があるとき。
<?php if ( ! is_home() ) {
// Insert your markup ...
}
複数の条件をチェック
PHP演算子を使用して、単一のif文で複数の条件を評価できます。
これは、条件の組み合わせが真または偽であるかどうかを確認する必要がある場合に便利です。
<?php
// Check to see if any of 2 conditionals are met.
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.
}
<?php
// Check to see if 3 conditionals are met.
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 if ( have_posts() ) : while ( have_posts() ) : the_post(); ?>
<h2 id="post-<?php the_ID(); ?>">
<a href="<?php the_permalink(); ?>" rel="bookmark"><?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 »' );
echo '</div>';
?>
<?php endwhile; endif; ?>
変数サイドバーコンテンツ
この例では、読者が現在表示しているページに基づいてサイドバーに異なるコンテンツを表示します。
<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.
wp_list_categories( 'optionall=0&sort_column=name&list=1&children=0' );
} elseif ( is_category() ) {
// We're looking at a single category view, so let's show _all_ the categories.
wp_list_categories( 'optionall=1&sort_column=name&list=1&children=1&hierarchical=1' );
} 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 'This is my about page!';
} elseif ( is_page( 'Colophon' ) ) {
echo 'This is my colophon page, running on WordPress ' . bloginfo( 'version' ) . '';
} else {
// Catch-all for other pages.
echo 'Vote for Pedro!';
}
} else {
// Catch-all for everything else (archives, searches, 404s, etc)
echo 'Pedro offers you his protection.';
}
?>
</div><!-- #sidebar -->
役立つ404ページ
エラー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!';
}