- 赤色のリンクは、まだ日本語Codexに存在しないページ・画像です。英語版と併せてご覧ください。(詳細)
「関数リファレンス/in category」の版間の差分
細 (差分リンク追加等、要更新) |
細 (→関連項目: Category:条件分岐タグ) |
||
(4人の利用者による、間の7版が非表示) | |||
1行目: | 1行目: | ||
− | + | <div id="Description"> | |
== 説明 == | == 説明 == | ||
+ | </div> | ||
− | + | 現在の投稿(あるいは指定した任意の投稿)に、指定した[[用語集#カテゴリー|カテゴリー]]が割り当てられているか調べます。 | |
+ | <tt>in_category()</tt> は、投稿に直接割り当てられているカテゴリー(管理画面の<em>新規投稿/編集</em>でチェックしたカテゴリー)のみを考慮します。 | ||
+ | しかし、そのカテゴリーの親は考慮しません(用例の「[[#Testing_if_a_post_is_in_a_descendant_category|子カテゴリー内の投稿かテストする]]」も参考にしてください)。 | ||
+ | |||
+ | このタグは、[[ループ]]内で現在の投稿をテストできます。 | ||
+ | また([[Version 2.7|バージョン 2.7]] 以降で)単一投稿リクエストの場合に[[ループ]]外でも使えます。 | ||
+ | テストしたい投稿を指定すれば、どこでも使用できます。 | ||
+ | |||
+ | <div id="Usage"> | ||
== 使い方 == | == 使い方 == | ||
+ | </div> | ||
+ | |||
+ | <?php in_category( $category, $_post ) ?> | ||
+ | |||
+ | <div id="Parameters"> | ||
+ | == パラメータ == | ||
+ | </div> | ||
+ | |||
+ | {{Parameter|$category|mixed|ID(整数)、名前またはスラッグ(文字列)、あるいはそれらの配列で指定されるカテゴリー。}} | ||
+ | : ID は、整数むき出しでも文字列として書いてもどちらでも構いません。 | ||
+ | :*<code>in_category( 5 )</code> | ||
+ | :*<code>in_category( '5' )</code> | ||
+ | |||
+ | {{Parameter|$_post|mixed|投稿(整数で ID を指定、あるいはオブジェクト)。デフォルトは[[ループ]]内の現在の投稿、あるいは[[関数リファレンス/is main query|メインクエリ]]の投稿。|オプション}} | ||
+ | |||
+ | <div id="Return_Values"> | ||
+ | == 戻り値 == | ||
+ | </div> | ||
+ | |||
+ | ; (真偽値) : 投稿に指定したカテゴリーが割り当てられていれば true、そうでなければ false | ||
+ | |||
+ | <div id="Notes"> | ||
+ | == 参考 == | ||
+ | </div> | ||
− | + | * [[Version 2.5|バージョン 2.5]] 以降では、カテゴリー名でカテゴリーを指定できます。 | |
− | + | * [[Version 2.7|バージョン 2.7]] 以降では、カテゴリースラッグでカテゴリーを指定できます。 | |
− | + | * [[Version 2.7|バージョン 2.7]] 以降では、複数のカテゴリーについてチェックできます。 | |
− | + | * [[Version 2.7|バージョン 2.7]] 以降では、(単一投稿クエリでは)[[ループ|WordPress ループ]]の外で使用できます。 | |
− | + | * [[Version 2.7|バージョン 2.7]] 以降では、(現在の投稿だけでなく)任意の投稿を指定してテストできます。 | |
+ | <div id="Examples"> | ||
== 用例 == | == 用例 == | ||
+ | </div> | ||
− | === | + | <div id="Testing_the_current_post_within_the_Loop"> |
+ | === ループ内で現在の投稿をテストする === | ||
+ | </div> | ||
− | + | <tt>in_category()</tt> は、[[ループ]]内で、投稿のカテゴリーに基づいて異なる処理を行うときによく用います。 | |
+ | 例えば: | ||
− | <pre><?php if ( in_category( | + | <pre> |
− | + | <?php | |
+ | if ( in_category( 'pachyderms' )) { | ||
+ | // カバは胴体が長い... | ||
+ | } elseif ( in_category( array( 'Tropical Birds', 'small-mammals' ) )) { | ||
+ | // 彼らは体温が高い... | ||
} else { | } else { | ||
− | + | // 等々。 | |
} | } | ||
− | ?></pre> | + | ?> |
+ | </pre> | ||
+ | |||
+ | <div id="Testing_the_current_post_outside_the_Loop"> | ||
+ | === ループ外で現在の投稿をテストする === | ||
+ | </div> | ||
+ | |||
+ | (通常 <tt>single.php</tt> テンプレートで扱う)個別投稿のリクエストでは、ループが始まる前でもカテゴリーをテストすることができます。 | ||
− | + | 以下のように、これを用いてテンプレートを切り替えることができます。 | |
− | + | ||
− | + | ||
− | <pre><?php if ( in_category( | + | <pre> |
− | + | <?php | |
+ | if ( in_category('fruit') ) { | ||
+ | get_template_part( 'some', 'fruit' ); | ||
+ | } elseif ( in_category('vegetables') ) { | ||
+ | get_template_part( 'some', 'vegetables' ); | ||
} else { | } else { | ||
− | + | // 普通にループを続ける | |
+ | if ( have_posts() ) : while ( have_posts() ) : the_post(); | ||
+ | // ... | ||
} | } | ||
− | ?></pre> | + | ?> |
+ | </pre> | ||
− | + | ( [http://boren.nu/archives/2005/03/13/custom-post-templates-plugin/ Custom Post Templates Plugin] は、個別投稿のテンプレートが作れます。単一の投稿だけでなく、所定のカテゴリーの全投稿に使用するテンプレートを追加する例もあります。デフォルトではコメントアウトされていますが、対応する行をアンコメントすると容易に実装できます。'''訳注''': このプラグインは古いかもしれません。 --[[利用者:Mizuno|Mizuno]] 2010年3月30日 (火) 10:00 (UTC) ) | |
− | + | <div id="Testing_if_a_post_is_in_a_descendant_category"> | |
− | + | === 子カテゴリー内の投稿かテストする === | |
+ | </div> | ||
− | < | + | 次のようなとき、WordPress は指定されたカテゴリーに<em>加えて</em>子カテゴリー(子、孫、…)から投稿を取得します。 |
− | + | * カテゴリーアーカイブを表示する。 | |
− | + | * <tt>[[クラスリファレンス/WP_Query|WP_Query()]]</tt> や <tt>[[テンプレートタグ/query posts|query_posts()]]</tt> や <tt>[[テンプレートタグ/get posts|get_posts()]]</tt> でカテゴリーの投稿を表示する。 | |
− | + | * メインクエリに <tt>[[関数リファレンス/is_main_query|is_main_query()]]</tt> を使ってフックする。 | |
− | + | しかし <tt>in_category()</tt> は投稿に割り当てられたカテゴリーのみをテストし、その親カテゴリー(親、親の親、…)を対象としません。 | |
− | + | ||
− | + | ||
− | + | ||
− | + | 例えば、投稿がサブカテゴリー <em>Fruit → Bananas</em> に割り当てられているがカテゴリー <em>Fruit</em> に割り当てられていない場合、<em>Fruit</em> カテゴリーアーカイブは "Bananas" の投稿を表示しますが、その投稿について <code>in_category('fruit')</code> を呼び出すと常に <tt>false</tt> を返します。 | |
− | + | 親カテゴリーとその子カテゴリーを全てリストすることができます。例えば: | |
− | + | <pre> | |
− | + | <?php | |
− | + | if ( in_category( array( 'fruits', 'apples', 'bananas', 'cantaloupes', 'guavas', /*等々*/ ) )) { | |
− | + | // 全部が果物… | |
+ | } | ||
+ | ?></pre> | ||
− | + | しかしながら "Fruit" カテゴリーに子カテゴリーを移動または追加する度にコードを編集する必要があります。 | |
− | + | より柔軟な方法は、下記で定義する <tt>post_is_in_descendant_category</tt> 関数を使用することです('''注意''':呼び出す前にテンプレート、プラグイン、またはテーマ関数にコードをコピーする必要があります)。 | |
+ | 下の例のように <tt>in_category()</tt> と一緒に使用することができます(この例で 11 は "Fruit" カテゴリーの ID です)。 | ||
+ | |||
+ | <pre> | ||
+ | // 投稿が "fruit" カテゴリーまたは "fruit" の子孫カテゴリーに割り当てられているか? | ||
+ | <?php if ( in_category( 'fruit' ) || post_is_in_descendant_category( 11 ) ) { | ||
+ | // 全部が果物… | ||
+ | } | ||
+ | ?> | ||
+ | </pre> | ||
+ | |||
+ | カテゴリー名で参照したい場合には、以下の例のようにします。 | ||
+ | |||
+ | <pre> | ||
+ | if ( $category_to_check = get_term_by( 'name', 'fruit', 'category' ) ) | ||
+ | post_is_in_descendant_category( $category_to_check->term_id ); | ||
+ | </pre> | ||
+ | |||
+ | ==== post_is_in_descendant_category 関数 ==== | ||
+ | |||
+ | <pre> | ||
+ | <?php | ||
+ | /** | ||
+ | * 投稿に付けられたカテゴリーが、指定されたカテゴリーの子孫カテゴリーに含まれるかテストする | ||
+ | * | ||
+ | * @パラメータ 整数|配列 $cats - カテゴリーを指定。整数の ID または整数の ID の配列 | ||
+ | * @パラメータ 整数|オブジェクト $_post - 投稿。省略するとループまたはメインクエリ内の現在の投稿をテストする | ||
+ | * @戻り値 真偽値 True - 投稿のカテゴリーの一つ以上が指定されたカテゴリーの何れかの子孫カテゴリーである場合 | ||
+ | * @参考 get_term_by() - カテゴリー名またはスラッグからカテゴリー ID を取得するのに使える | ||
+ | * @内部で使用 get_term_children() - $cats を渡す | ||
+ | * @内部で使用 in_category() - $_post を渡す(空でもよい) | ||
+ | * @バージョン 2.7 | ||
+ | * @リンク http://codex.wordpress.org/Function_Reference/in_category#Testing_if_a_post_is_in_a_descendant_category | ||
+ | */ | ||
+ | if ( ! function_exists( 'post_is_in_descendant_category' ) ) { | ||
+ | function post_is_in_descendant_category( $cats, $_post = null ) { | ||
+ | foreach ( (array) $cats as $cat ) { | ||
+ | // get_term_children() は整数の ID しか受け付けない | ||
+ | $descendants = get_term_children( (int) $cat, 'category' ); | ||
+ | if ( $descendants && in_category( $descendants, $_post ) ) | ||
+ | return true; | ||
+ | } | ||
+ | return false; | ||
+ | } | ||
+ | } | ||
+ | ?> | ||
+ | </pre> | ||
== 外部資料 == | == 外部資料 == | ||
68行目: | 168行目: | ||
* [http://www.php.net/manual/ja/language.operators.php PHPマニュアル » 第15章 演算子] | * [http://www.php.net/manual/ja/language.operators.php PHPマニュアル » 第15章 演算子] | ||
− | + | <div id="Change_Log"> | |
+ | == 変更履歴 == | ||
+ | </div> | ||
− | == | + | バージョン 1.2.0 にて導入されました。 |
+ | |||
+ | <div id="Source_File"> | ||
+ | == ソースファイル == | ||
+ | </div> | ||
+ | |||
+ | <tt>in_category()</tt> は {{Trac|wp-includes/category-template.php}} にあります。 | ||
+ | |||
+ | <div id="Related"> | ||
+ | == 関連項目== | ||
+ | </div> | ||
− | |||
{{Tag Category Tags}} | {{Tag Category Tags}} | ||
− | {{ | + | {{Conditional Tags}} |
+ | |||
+ | {{Tag Footer}} | ||
+ | |||
+ | {{原文|Function_Reference/in_category|144450}} <!-- 08:21, 25 June 2014 Kirou 版 --> | ||
+ | |||
+ | {{DEFAULTSORT:In_category}} | ||
+ | [[Category:関数]] | ||
+ | [[Category:条件分岐タグ]] | ||
− | [[en: | + | [[en:Function Reference/in_category]] |
2015年5月15日 (金) 09:26時点における最新版
目次
説明
現在の投稿(あるいは指定した任意の投稿)に、指定したカテゴリーが割り当てられているか調べます。
in_category() は、投稿に直接割り当てられているカテゴリー(管理画面の新規投稿/編集でチェックしたカテゴリー)のみを考慮します。 しかし、そのカテゴリーの親は考慮しません(用例の「子カテゴリー内の投稿かテストする」も参考にしてください)。
このタグは、ループ内で現在の投稿をテストできます。 また(バージョン 2.7 以降で)単一投稿リクエストの場合にループ外でも使えます。 テストしたい投稿を指定すれば、どこでも使用できます。
使い方
<?php in_category( $category, $_post ) ?>
パラメータ
- $category
- (mixed) (必須) ID(整数)、名前またはスラッグ(文字列)、あるいはそれらの配列で指定されるカテゴリー。
- 初期値: なし
- ID は、整数むき出しでも文字列として書いてもどちらでも構いません。
in_category( 5 )
in_category( '5' )
戻り値
- (真偽値)
- 投稿に指定したカテゴリーが割り当てられていれば true、そうでなければ false
参考
- バージョン 2.5 以降では、カテゴリー名でカテゴリーを指定できます。
- バージョン 2.7 以降では、カテゴリースラッグでカテゴリーを指定できます。
- バージョン 2.7 以降では、複数のカテゴリーについてチェックできます。
- バージョン 2.7 以降では、(単一投稿クエリでは)WordPress ループの外で使用できます。
- バージョン 2.7 以降では、(現在の投稿だけでなく)任意の投稿を指定してテストできます。
用例
ループ内で現在の投稿をテストする
in_category() は、ループ内で、投稿のカテゴリーに基づいて異なる処理を行うときによく用います。 例えば:
<?php if ( in_category( 'pachyderms' )) { // カバは胴体が長い... } elseif ( in_category( array( 'Tropical Birds', 'small-mammals' ) )) { // 彼らは体温が高い... } else { // 等々。 } ?>
ループ外で現在の投稿をテストする
(通常 single.php テンプレートで扱う)個別投稿のリクエストでは、ループが始まる前でもカテゴリーをテストすることができます。
以下のように、これを用いてテンプレートを切り替えることができます。
<?php if ( in_category('fruit') ) { get_template_part( 'some', 'fruit' ); } elseif ( in_category('vegetables') ) { get_template_part( 'some', 'vegetables' ); } else { // 普通にループを続ける if ( have_posts() ) : while ( have_posts() ) : the_post(); // ... } ?>
( Custom Post Templates Plugin は、個別投稿のテンプレートが作れます。単一の投稿だけでなく、所定のカテゴリーの全投稿に使用するテンプレートを追加する例もあります。デフォルトではコメントアウトされていますが、対応する行をアンコメントすると容易に実装できます。訳注: このプラグインは古いかもしれません。 --Mizuno 2010年3月30日 (火) 10:00 (UTC) )
子カテゴリー内の投稿かテストする
次のようなとき、WordPress は指定されたカテゴリーに加えて子カテゴリー(子、孫、…)から投稿を取得します。
- カテゴリーアーカイブを表示する。
- WP_Query() や query_posts() や get_posts() でカテゴリーの投稿を表示する。
- メインクエリに is_main_query() を使ってフックする。
しかし in_category() は投稿に割り当てられたカテゴリーのみをテストし、その親カテゴリー(親、親の親、…)を対象としません。
例えば、投稿がサブカテゴリー Fruit → Bananas に割り当てられているがカテゴリー Fruit に割り当てられていない場合、Fruit カテゴリーアーカイブは "Bananas" の投稿を表示しますが、その投稿について in_category('fruit')
を呼び出すと常に false を返します。
親カテゴリーとその子カテゴリーを全てリストすることができます。例えば:
<?php if ( in_category( array( 'fruits', 'apples', 'bananas', 'cantaloupes', 'guavas', /*等々*/ ) )) { // 全部が果物… } ?>
しかしながら "Fruit" カテゴリーに子カテゴリーを移動または追加する度にコードを編集する必要があります。
より柔軟な方法は、下記で定義する post_is_in_descendant_category 関数を使用することです(注意:呼び出す前にテンプレート、プラグイン、またはテーマ関数にコードをコピーする必要があります)。 下の例のように in_category() と一緒に使用することができます(この例で 11 は "Fruit" カテゴリーの ID です)。
// 投稿が "fruit" カテゴリーまたは "fruit" の子孫カテゴリーに割り当てられているか? <?php if ( in_category( 'fruit' ) || post_is_in_descendant_category( 11 ) ) { // 全部が果物… } ?>
カテゴリー名で参照したい場合には、以下の例のようにします。
if ( $category_to_check = get_term_by( 'name', 'fruit', 'category' ) ) post_is_in_descendant_category( $category_to_check->term_id );
post_is_in_descendant_category 関数
<?php /** * 投稿に付けられたカテゴリーが、指定されたカテゴリーの子孫カテゴリーに含まれるかテストする * * @パラメータ 整数|配列 $cats - カテゴリーを指定。整数の ID または整数の ID の配列 * @パラメータ 整数|オブジェクト $_post - 投稿。省略するとループまたはメインクエリ内の現在の投稿をテストする * @戻り値 真偽値 True - 投稿のカテゴリーの一つ以上が指定されたカテゴリーの何れかの子孫カテゴリーである場合 * @参考 get_term_by() - カテゴリー名またはスラッグからカテゴリー ID を取得するのに使える * @内部で使用 get_term_children() - $cats を渡す * @内部で使用 in_category() - $_post を渡す(空でもよい) * @バージョン 2.7 * @リンク http://codex.wordpress.org/Function_Reference/in_category#Testing_if_a_post_is_in_a_descendant_category */ if ( ! function_exists( 'post_is_in_descendant_category' ) ) { function post_is_in_descendant_category( $cats, $_post = null ) { foreach ( (array) $cats as $cat ) { // get_term_children() は整数の ID しか受け付けない $descendants = get_term_children( (int) $cat, 'category' ); if ( $descendants && in_category( $descendants, $_post ) ) return true; } return false; } } ?>
外部資料
変更履歴
バージョン 1.2.0 にて導入されました。
ソースファイル
in_category() は wp-includes/category-template.php
にあります。
関連項目
カテゴリータグ:
the_category(),
the_category_rss(),
single_cat_title(),
category_description(),
wp_dropdown_categories(),
wp_list_categories(),
get_the_category(),
get_the_category_by_ID(),
get_category_by_slug(),
get_the_category_list(),
get_category_parents(),
get_category_link(),
is_category(),
in_category()
条件分岐タグ:
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()
最新英語版: WordPress Codex » Function_Reference/in_category (最新版との差分)