当サイト、Codex 日本語版は今後積極的な更新は行わない予定です。後継となる新ユーザーマニュアルは、https://ja.wordpress.org/support/ にあります。
万が一、当サイトで重大な問題を発見した際などは、フォーラムWordSlack #docs チャンネルでお知らせください。</p>

「関数リファレンス/in category」の版間の差分

提供: WordPress Codex 日本語版
移動先: 案内検索
(en:Function Reference/in_category 08:21, 25 June 2014 Kirou 版を反映して訳を改訂。)
1行目: 1行目:
 +
<div id="Description">
 
== 説明 ==
 
== 説明 ==
 +
</div>
  
<!-- 現在の投稿(または任意の投稿)が、指定した[[用語集#Category|カテゴリ]]に属するか調べます。通常、このタグは[[The Loop|ループ]]の中で使いますが、[[#ループ外で使う|ループ外で使いたい場合]]は、事前に変数 <code>$post</code> の値をセットしておく必要があります。 -->
+
現在の投稿(あるいは指定した任意の投稿)に、指定した[[用語集#カテゴリー|カテゴリー]]が割り当てられているか調べます。
現在の投稿(あるいは指定した任意の投稿) に指定した[[用語集#カテゴリー|カテゴリー]]が割り当てられているか調べます。
+
  
<tt>in_category()</tt> は、投稿に直接割り当てられているカテゴリー(<em>新規投稿/編集</em>でチェックしたカテゴリー)のみを考慮します。そのカテゴリーの親は考慮しません([[#Testing_if_a_post_is_in_a_descendant_category|Testing if a post is in a descendant category]] も参考にしてください)。
+
<tt>in_category()</tt> は、投稿に直接割り当てられているカテゴリー(管理画面の<em>新規投稿/編集</em>でチェックしたカテゴリー)のみを考慮します。
 +
しかし、そのカテゴリーの親は考慮しません(用例の「[[#Testing_if_a_post_is_in_a_descendant_category|子カテゴリー内の投稿かテストする]]」も参考にしてください)。
  
このタグは、[[The Loop]] 内で現在の投稿、あるいは ([[Version 2.7]] 以降で)単一投稿リクエストの場合 Loop 外でテストします。テストしたい投稿を指定すれば、どこでも使用できます。
+
このタグは、[[ループ]]内で現在の投稿をテストできます。
 +
また([[Version 2.7|バージョン 2.7]] 以降で)単一投稿リクエストの場合に[[ループ]]外でも使えます。
 +
テストしたい投稿を指定すれば、どこでも使用できます。
  
 +
<div id="Usage">
 
== 使い方 ==
 
== 使い方 ==
 +
</div>
  
例えば、現在処理中(ページを生成中)の投稿が、あるカテゴリID に属するときにのみ、特定の [[用語集#PHP|PHP]] や [[用語集#HTML|HTML]] を動作させたい場合には、これで 'category_id' を指定します。
+
  <?php in_category( $category, $_post ) ?>
   
+
<pre><?php if ( in_category( $category, $_post ) ): ?>
+
  // ここにカテゴリ特有の PHP/HTML を書く
+
<?php endif; ?></pre>
+
  
== <span id="Parameters">パラメータ</span> ==
+
<div id="Parameters">
 +
== パラメータ ==
 +
</div>
  
{{Parameter|$category|mixed|ID (整数)、名前またはスラッグ (文字列)、あるいはそれらの配列で指定されるカテゴリー}}
+
{{Parameter|$category|mixed|ID(整数)、名前またはスラッグ(文字列)、あるいはそれらの配列で指定されるカテゴリー。}}
: IDは、整数むき出しでも文字列として書いてもどちらでも構いません。
+
: ID は、整数むき出しでも文字列として書いてもどちらでも構いません。
:*<code>in_category(5)</code>
+
:*<code>in_category( 5 )</code>
:*<code>in_category('5')</code>
+
:*<code>in_category( '5' )</code>
  
{{Parameter|$_post|mixed|投稿 (整数 ID あるいはオブジェクト)。デフォルトは Loop の現在の投稿あるいは主クエリの投稿。|オプション}}
+
{{Parameter|$_post|mixed|投稿(整数で ID を指定、あるいはオブジェクト)。デフォルトは[[ループ]]内の現在の投稿、あるいは[[関数リファレンス/is main query|メインクエリ]]の投稿。|オプション}}
  
==戻り値==
+
<div id="Return_Values">
 +
== 戻り値 ==
 +
</div>
  
; (boolean) : 投稿に指定したカテゴリーが割り当てられていれば True、そうでなければ false
+
; (真偽値) : 投稿に指定したカテゴリーが割り当てられていれば true、そうでなければ false
  
====
+
<div id="Notes">
 +
== 参考 ==
 +
</div>
  
* [[Version 2.5]] 以降では、カテゴリー名でカテゴリーを指定できます。
+
* [[Version 2.5|バージョン 2.5]] 以降では、カテゴリー名でカテゴリーを指定できます。
* [[Version 2.7]] 以降では、カテゴリースラッグでカテゴリーを指定できます。
+
* [[Version 2.7|バージョン 2.7]] 以降では、カテゴリースラッグでカテゴリーを指定できます。
* [[Version 2.7]] 以降では、複数のカテゴリーについてチェックできます。
+
* [[Version 2.7|バージョン 2.7]] 以降では、複数のカテゴリーについてチェックできます。
* [[Version 2.7]] 以降では、(単一投稿クエリでは) WordPress Loop の外で使用できます。
+
* [[Version 2.7|バージョン 2.7]] 以降では、(単一投稿クエリでは)[[ループ|WordPress ループ]]の外で使用できます。
* [[Version 2.7]] 以降では、(現在の投稿だけでなく)任意の投稿を指定してテストできます。
+
* [[Version 2.7|バージョン 2.7]] 以降では、(現在の投稿だけでなく)任意の投稿を指定してテストできます。
  
 +
<div id="Examples">
 
== 用例 ==
 
== 用例 ==
 +
</div>
  
=== Loop 内で現在の投稿をテストする ===
+
<div id="Testing_the_current_post_within_the_Loop">
 +
=== ループ内で現在の投稿をテストする ===
 +
</div>
  
<tt>in_category()</tt> は、Loop 内で、投稿のカテゴリーに基づいて異なる処理を行うときによく用います。例:
+
<tt>in_category()</tt> は、[[ループ]]内で、投稿のカテゴリーに基づいて異なる処理を行うときによく用います。
 +
例えば:
  
<pre><?php  
+
<pre>
if ( in_category( 'pachoderms' )) {
+
<?php  
// They have long trunks...
+
if ( in_category( 'pachyderms' )) {
 +
// カバは胴体が長い...
 
} elseif ( in_category( array( 'Tropical Birds', 'small-mammals' ) )) {
 
} elseif ( in_category( array( 'Tropical Birds', 'small-mammals' ) )) {
// They are warm-blooded...
+
// 彼らは体温が高い...
 
} else {
 
} else {
// & c.
+
// 等々。
 
}
 
}
?></pre>
+
?>
 +
</pre>
  
=== Loop 外で現在の投稿をテストする ===
+
<div id="Testing_the_current_post_outside_the_Loop">
 +
=== ループ外で現在の投稿をテストする ===
 +
</div>
  
(通常 <tt>single.php</tt> テンプレートで扱う)個別投稿のリクエストでは、Loop が始まる前にカテゴリーをテストすることができます。
+
(通常 <tt>single.php</tt> テンプレートで扱う)個別投稿のリクエストでは、ループが始まる前でもカテゴリーをテストすることができます。
  
以下のように、これを用いてテンプレートを変更することができます。
+
以下のように、これを用いてテンプレートを切り替えるすることができます。
  
<pre><?php
+
<pre>
 +
<?php
 
if ( in_category('fruit') ) {
 
if ( in_category('fruit') ) {
 
include 'single-fruit.php';
 
include 'single-fruit.php';
65行目: 83行目:
 
include 'single-vegetables.php';
 
include 'single-vegetables.php';
 
} else {
 
} else {
// Continue with normal Loop
+
// 普通にループを続ける
 
if ( have_posts() ) : while ( have_posts() ) : the_post();
 
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))
+
[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>
  
カテゴリーアーカイブを表示するとき、あるいは <tt>query_posts()</tt> や <tt>get_posts()</tt> でカテゴリーの投稿を表示するとき、WordPress は特定のカテゴリーに<em>加えて</em>子カテゴリーを呼び出します。しかし <tt>in_category()</tt> は投稿に割り当てられたカテゴリーかどうかをテストし、親カテゴリーを対象としません。
+
次のようなとき、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 &rarr; Bananas</em> に割り当てられているがカテゴリー <em>Fruit</em> に割り当てられていない場合、<em>Fruit</em> カテゴリーアーカイブは "Bananas" 投稿を表示しますが、この投稿について <code>in_category('fruit')</code> を呼び出すと、常に <tt>false</tt> を返します。
+
例えば、投稿がサブカテゴリー <em>Fruit &rarr; 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', /*etc*/ ) )) {
+
<pre>
// These are all fruits
+
<?php
 +
if ( in_category( array( 'fruits', 'apples', 'bananas', 'cantaloupes', 'guavas', /*等々*/ ) )) {
 +
// 全部が果物…
 
}
 
}
 
?></pre>
 
?></pre>
  
しかしながら "Fruit" カテゴリーに移動または追加する度にコードを編集する必要があります。
+
しかしながら "Fruit" カテゴリーに子カテゴリーを移動または追加する度にコードを編集する必要があります。
  
より柔軟な方法は、下記で定義する <tt>post_is_in_descendant_category</tt> 関数(呼び出す前にテンプレート、プラグイン、またはテーマ関数にコードをコピーする必要がある)を使用することです。下の例のようにすると <tt>in_category()</tt> と一緒に使用することができます(この例では 11 は "Fruit" カテゴリーの IDです)。
+
より柔軟な方法は、下記で定義する <tt>post_is_in_descendant_category</tt> 関数を使用することです('''注意''':呼び出す前にテンプレート、プラグイン、またはテーマ関数にコードをコピーする必要があります)。
 +
下の例のように <tt>in_category()</tt> と一緒に使用することができます(この例で 11 は "Fruit" カテゴリーの ID です)。
  
<pre> // Post is assigned to "fruit" category or any descendant of "fruit" category?
+
<pre>
 +
// 投稿が "fruit" カテゴリーまたは "fruit" の子孫カテゴリーに割り当てられているか?
 
<?php if ( in_category( 'fruit' ) || post_is_in_descendant_category( 11 ) ) {
 
<?php if ( in_category( 'fruit' ) || post_is_in_descendant_category( 11 ) ) {
// These are all fruits…
+
// 全部が果物…
 
}
 
}
?></pre>
+
?>
 +
</pre>
  
 
カテゴリー名で参照したい場合には、以下の例のようにします。
 
カテゴリー名で参照したい場合には、以下の例のようにします。
  
  post_is_in_descendant_category( get_term_by( 'name', 'fruit', 'category' ) )
+
<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 関数 ====
 
==== post_is_in_descendant_category 関数 ====
  
<pre><?php
+
<pre>
 +
<?php
 
/**
 
/**
  * Tests if any of a post's assigned categories are descendants of target categories
+
  * 投稿に付けられたカテゴリーが、指定されたカテゴリーの子孫カテゴリーに含まれるかテストする
 
  *
 
  *
  * @param int|array $cats The target categories. Integer ID or array of integer IDs
+
  * @パラメータ 整数|配列 $cats - カテゴリーを指定。整数の ID または整数の ID の配列
  * @param int|object $_post The post. Omit to test the current post in the Loop or main query
+
  * @パラメータ 整数|オブジェクト $_post - 投稿。省略するとループまたはメインクエリ内の現在の投稿をテストする
  * @return bool True if at least 1 of the post's categories is a descendant of any of the target categories
+
  * @戻り値 真偽値 True - 投稿のカテゴリーの一つ以上が指定されたカテゴリーの何れかの子孫カテゴリーである場合
  * @see get_term_by() You can get a category by name or slug, then pass ID to this function
+
  * @参考 get_term_by() - カテゴリー名またはスラッグからカテゴリー ID を取得するのに使える
  * @uses get_term_children() Passes $cats
+
  * @内部で使用 get_term_children() - $cats を渡す
  * @uses in_category() Passes $_post (can be empty)
+
  * @内部で使用 in_category() - $_post を渡す(空でもよい)
  * @version 2.7
+
  * @バージョン 2.7
  * @link http://codex.wordpress.org/Function_Reference/in_category#Testing_if_a_post_is_in_a_descendant_category
+
  * @リンク http://codex.wordpress.org/Function_Reference/in_category#Testing_if_a_post_is_in_a_descendant_category
 
  */
 
  */
function post_is_in_descendant_category( $cats, $_post = null )
+
if ( ! function_exists( 'post_is_in_descendant_category' ) ) {
{
+
function post_is_in_descendant_category( $cats, $_post = null ) {
foreach ( (array) $cats as $cat ) {
+
foreach ( (array) $cats as $cat ) {
// get_term_children() accepts integer ID only
+
// get_term_children() は整数の ID しか受け付けない
$descendants = get_term_children( (int) $cat, 'category');
+
$descendants = get_term_children( (int) $cat, 'category' );
if ( $descendants && in_category( $descendants, $_post ) )
+
if ( $descendants && in_category( $descendants, $_post ) )
return true;
+
return true;
 +
}
 +
return false;
 
}
 
}
return false;
 
 
}
 
}
?></pre>
+
?>
 +
</pre>
  
<!-- 以下: 古い説明を一旦コメントアウト by bono
+
== 外部資料 ==
  
=== カテゴリ特有のテキストを表示 <span id="Display Some Category Specific Text"></span>===
+
* [http://www.php.net/manual/ja/language.operators.php PHPマニュアル &raquo; 第15章 演算子]
  
カテゴリ番号 '''5''' に属する各投稿に <code><nowiki><span class="good-cat-5">これはいいカテゴリです</span></nowiki></code> と表示し、それ以外の投稿には <code><nowiki><span class="bad-cat">これは悪いカテゴリです</span></nowiki></code> と表示:
+
<div id="Change_Log">
 +
== 変更履歴 ==
 +
</div>
  
<pre><?php if ( in_category(5) ) {
+
バージョン 1.2.0 にて導入されました。
echo '<span class="my-cat-5">これはいいカテゴリです</span>';
+
} else {
+
echo '<span class="bad-cat">これは悪いカテゴリです</span>';
+
}
+
?></pre>
+
  
残念ながら、<code>in_category</code> はカテゴリの親子関係を判断できません。例えばカテゴリ 11(バナナ)がカテゴリ 2(果物)の子カテゴリである場合に、バナナについての投稿を表示しているとき、<code>in_category('2')</code> は FALSE を返します。
+
<div id="Source_File">
あるカテゴリとその全てのサブカテゴリに同じテキストを表示したいなら、その全てを書き出す必要があります。
+
== ソースファイル ==
<code>in_category(2,11)</code> のような書き方はできません。PHP の式で <code>||</code>(論理和) <code>&&</code>(論理積) を使わなければなりません。(参考: [http://www.php.net/manual/ja/language.operators.php 演算子])
+
</div>
  
<pre><?php if ( in_category(2) || in_category (11) || in_category (12) [他にも果物のカテゴリがあれば - 面倒] ) {
+
<tt>in_category()</tt> は {{Trac|wp-includes/category-template.php}} にあります。
echo '<span class="fruits">いろいろな種類の果物について</span>';
+
} else {
+
echo '<span class="bad-cat">おいしくない!健康的じゃない!</span>';
+
}
+
?></pre>
+
  
=== ループ外で使う <span id="Use OUTSIDE The Loop"></span>===改名注意:「テンプレートタグ」から直リンク
+
<div id="Related">
 +
== 関連項目==
 +
</div>
  
通常、このタグは[[The Loop|ループ]]の内側で使わなければなりません。ループ中でのみ値が与えられる WordPress の PHP 変数(<code>$post</code>)が必要だからです。しかし、この変数に''手動で''値を与え、このタグをちゃんと使えるようにもできます。
+
{{Tag Category Tags}}
  
例えば[[Using Themes|テーマ]]内で、個々の投稿が属するカテゴリによって全く別のページを表示する <code>single.php</code> [[テンプレート|テンプレートファイル]]を使い分けたいとしましょう。<code>single.php</code> の中にあるループの中で <code>in_category()</code> を呼び出すのでは、都合が悪いですね。そこで、テーマの <code>single.php</code> を次のように使います。
+
{{Tag Footer}}
  
<pre><?php
+
{{原文|Function_Reference/in_category|144450}} <!-- 08:21, 25 June 2014 Kirou 版 -->
$post = $wp_query->post;
+
if ( in_category('17') ) {
+
include(TEMPLATEPATH . '/single2.php');
+
} else {
+
include(TEMPLATEPATH . '/single1.php');
+
}
+
?></pre>
+
 
+
カテゴリ '''17''' に属する投稿のときはテンプレートとして <code>single2.php</code> を使い、それ以外では <code>single1.php</code> を使います。
+
 
+
以上:古い説明を一旦コメントアウト by bono -->
+
 
+
== 外部資料 ==
+
 
+
* [http://www.php.net/manual/ja/language.operators.php PHPマニュアル &raquo; 第15章 演算子]
+
 
+
{{原文|Function Reference/in_category|83060}}<!-- 23:19, 15 February 2010 BryceBubbles -->
+
 
+
== 関連 ==<!-- Related -->
+
  
 
{{DEFAULTSORT:In_category}}
 
{{DEFAULTSORT:In_category}}
{{Tag Category Tags}}
+
[[Category:関数]]
 
+
{{PHP Function Tag Footer}}
+
  
[[en:Template Tags/in_category]]
+
[[en:Function Reference/in_category]]

2014年8月10日 (日) 11:21時点における版

現在の投稿(あるいは指定した任意の投稿)に、指定したカテゴリーが割り当てられているか調べます。

in_category() は、投稿に直接割り当てられているカテゴリー(管理画面の新規投稿/編集でチェックしたカテゴリー)のみを考慮します。 しかし、そのカテゴリーの親は考慮しません(用例の「子カテゴリー内の投稿かテストする」も参考にしてください)。

このタグは、ループ内で現在の投稿をテストできます。 また(バージョン 2.7 以降で)単一投稿リクエストの場合にループ外でも使えます。 テストしたい投稿を指定すれば、どこでも使用できます。

使い方

<?php in_category( $category, $_post ) ?>

パラメータ

$category
mixed) (必須) ID(整数)、名前またはスラッグ(文字列)、あるいはそれらの配列で指定されるカテゴリー。
初期値: なし
ID は、整数むき出しでも文字列として書いてもどちらでも構いません。
  • in_category( 5 )
  • in_category( '5' )
$_post
mixed) (オプション) 投稿(整数で ID を指定、あるいはオブジェクト)。デフォルトはループ内の現在の投稿、あるいはメインクエリの投稿。
初期値: なし

戻り値

(真偽値) 
投稿に指定したカテゴリーが割り当てられていれば true、そうでなければ false

参考

用例

ループ内で現在の投稿をテストする

in_category() は、ループ内で、投稿のカテゴリーに基づいて異なる処理を行うときによく用います。 例えば:

<?php 
if ( in_category( 'pachyderms' )) {
	// カバは胴体が長い...
} elseif ( in_category( array( 'Tropical Birds', 'small-mammals' ) )) {
	// 彼らは体温が高い...
} else {
	// 等々。
}
?>

ループ外で現在の投稿をテストする

(通常 single.php テンプレートで扱う)個別投稿のリクエストでは、ループが始まる前でもカテゴリーをテストすることができます。

以下のように、これを用いてテンプレートを切り替えるすることができます。

<?php
if ( in_category('fruit') ) {
	include 'single-fruit.php';
} elseif ( in_category('vegetables') ) {
	include 'single-vegetables.php';
} else {
	// 普通にループを続ける
	if ( have_posts() ) : while ( have_posts() ) : the_post();
	// ...
}
?>

Custom Post Templates Plugin は、個別投稿のテンプレートが作れます。単一の投稿だけでなく、所定のカテゴリーの全投稿に使用するテンプレートを追加する例もあります。デフォルトではコメントアウトされていますが、対応する行をアンコメントすると容易に実装できます。訳注: このプラグインは古いかもしれません。 --Mizuno 2010年3月30日 (火) 10:00 (UTC) )

子カテゴリー内の投稿かテストする

次のようなとき、WordPress は指定されたカテゴリーに加えて子カテゴリー(子、孫、…)から投稿を取得します。

しかし 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()


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


最新英語版: WordPress Codex » Function_Reference/in_category最新版との差分