taxonomy、term、category取得まとめ<初心者向け>
wordpressではカスタムタクソノミーやカテゴリーなどを使うことがよくあります。
これらには取得するのに専用の関数があるのですが、状況によって使い分ける必要があり、「あれっ?なんてやつだったっけ?」
ってなることがままあります。
毎回調べるのも面倒なのでこれさえ押さえれば大丈夫!ってリストをご紹介。
1.投稿に割り当てられたタームを取得
1 2 3 |
<?php // 投稿に割り当てられたタクソノミーのタームを取得 $terms = get_the_terms( $post->ID, $taxonomy ); |
ちなみに「category」専用の「get_the_category()」という関数も存在しますが、
「get_the_terms( $post->ID, ‘category’ );」とすることでcategoryも取得できます。
2.特定のタクソノミーに含まれるタームを取得
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 |
<?php //特定のタクソノミーに含まれるタームを取得 $terms = get_terms( $taxonomy, $args ); /* $args = array( 'orderby' => 'name',//(文字列) ソートするフィールド 'order' => 'ASC',//(文字列) ソートする方向 'hide_empty' => true, //(真偽値) 空の(投稿などのオブジェクトに付けられていない)タームを返しません。 'exclude' => array(), //(整数|文字列|配列) 除外するタームの ID の配列。ID をコンマで区切って文字列として指定することもできます。 'exclude_tree' => array(), //(整数) 除外する親タームの ID の配列。 'include' => array(),//(整数) 含めるタームの ID の配列。空文字列を指定するとすべてのタームを対象にします。 'number' => '', //(整数) 返すタームの最大個数。デフォルトではすべてのタームを返しま 'fields' => 'all', //(文字列)※1 'slug' => '', //(文字列|配列) 指定した値がスラッグに一致するタームを返す。デフォルトは空文字列。 'parent' => '',//(整数) 直近の子タームを返す(指定された値が親タームの ID であるタームのみ)。ゼロを指定するとトップレベルのタームのみを返す。デフォルトは空文字列。 'hierarchical' => true, //(真偽値) 子タームを持つタームを含める( 'hide_empty' が true のときでも)。 'child_of' => 0, //(整数) 指定したタームの子孫をすべて取得します。デフォルトは 0 です。参考: child_of と parent の違いは、parent が直近の子ターム(1 レベル下)のみを取得するのに対して、child_of はすべての子孫タームを取得します(存在するレベルすべて)。 'childless' => false,//(真偽値) タクソノミーが階層有りの場合、子を持たないタームのみを返します。階層無しの場合、すべてのタームを対象とします。(バージョン 4.2 で追加されました。) 'get' => '', //(文字列) デフォルトは空文字列です。この値を 'all' にすると 'hide_empty' と 'child_of' が無効になります(すべてのタームを取得します)。 'name__like' => '',//(文字列) ターム名にマッチさせたい文字列。ターム名に対してのみ、データベースクエリの LIKE '%string%' を実行します。これは名前に 'name__like' の文字列を含むタームにマッチします。参考:これは WordPress 3.7 からの仕様です。以前は name__like の文字列で始まる名前のタームにマッチしていました。 'description__like' => '',//(文字列) タームの説明に 'description__like' の文字列を含む(大文字小文字を区別して)タームを返します。デフォルトは空文字列です。説明に対してのみ、データベースクエリの LIKE '%string%' を実行します。これは説明に 'description__like' の文字列を含むタームにマッチします。 'pad_counts' => false, //(真偽値) true のとき、子孫タームすべてのカウント(投稿などのオブジェクトに付けられている回数)を合計します。 'offset' => '', //(整数) 見つかったタームの先頭から指定の個数を読み飛ばして返します。必ず 'number' と一緒に使ってください。そうしないと 'offset' は無視されて結果すべてが返されます。 'search' => '', //(文字列) ターム名にマッチさせたい文字列。ターム名とスラッグに対して、データベースクエリの LIKE '%search_string%' を実行します。これは 'search_string' の文字列を含むタームにマッチします。 'cache_domain' => 'core'//(文字列) バージョン 3.2 以上で使えます。'cache_domain' 引数は、get_terms() が作成したクエリにユニークなキャッシュ用キーを付与できます。例えば、この関数のフィルターを使ってクエリを変更するとき(例えば 'terms_clauses')、'cache_domain' にユニークな値を指定しておけば、キャッシュにある同様のクエリを上書きせず残しておけます。デフォルト値は 'core' です。 ); */ |
$taxonomyですが配列で複数のタクソノミーを指定することも可能です。
もちろんこちらもカテゴリーの取得が可能です。
3.タクソノミーアーカイブで現在のtermを取得する
1 2 3 4 5 6 7 8 9 |
<?php //タクソノミーアーカイブで現在のtermを取得する //カテゴリーアーカイブの場合 $nowCategory = get_category( get_query_var("cat") ); //カスタムタクソノミーアーカイブの場合 $nowTerm = get_term_by('slug', get_query_var('term'), get_query_var('taxonomy')); |
アーカイブページでどのtermか取得する場合は「カスタムタクソノミー」か「カテゴリー」かで取得する方法が異なりますので注意しましょう。
※カテゴリーは「get_query_var(“cat”)」カスタムタクソノミーは「get_query_var(‘term’)」を使用する必要があります。
4.まとめ
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 |
<?php // 投稿に割り当てられたタクソノミーのタームを取得 $terms = get_the_terms( $post->ID, $taxonomy ); //特定のタクソノミーに含まれるタームを取得 $terms = get_terms( $taxonomy, $args ); /* $args = array( 'orderby' => 'name',//(文字列) ソートするフィールド 'order' => 'ASC',//(文字列) ソートする方向 'hide_empty' => true, //(真偽値) 空の(投稿などのオブジェクトに付けられていない)タームを返しません。 'exclude' => array(), //(整数|文字列|配列) 除外するタームの ID の配列。ID をコンマで区切って文字列として指定することもできます。 'exclude_tree' => array(), //(整数) 除外する親タームの ID の配列。 'include' => array(),//(整数) 含めるタームの ID の配列。空文字列を指定するとすべてのタームを対象にします。 'number' => '', //(整数) 返すタームの最大個数。デフォルトではすべてのタームを返しま 'fields' => 'all', //(文字列)※1 'slug' => '', //(文字列|配列) 指定した値がスラッグに一致するタームを返す。デフォルトは空文字列。 'parent' => '',//(整数) 直近の子タームを返す(指定された値が親タームの ID であるタームのみ)。ゼロを指定するとトップレベルのタームのみを返す。デフォルトは空文字列。 'hierarchical' => true, //(真偽値) 子タームを持つタームを含める( 'hide_empty' が true のときでも)。 'child_of' => 0, //(整数) 指定したタームの子孫をすべて取得します。デフォルトは 0 です。参考: child_of と parent の違いは、parent が直近の子ターム(1 レベル下)のみを取得するのに対して、child_of はすべての子孫タームを取得します(存在するレベルすべて)。 'childless' => false,//(真偽値) タクソノミーが階層有りの場合、子を持たないタームのみを返します。階層無しの場合、すべてのタームを対象とします。(バージョン 4.2 で追加されました。) 'get' => '', //(文字列) デフォルトは空文字列です。この値を 'all' にすると 'hide_empty' と 'child_of' が無効になります(すべてのタームを取得します)。 'name__like' => '',//(文字列) ターム名にマッチさせたい文字列。ターム名に対してのみ、データベースクエリの LIKE '%string%' を実行します。これは名前に 'name__like' の文字列を含むタームにマッチします。参考:これは WordPress 3.7 からの仕様です。以前は name__like の文字列で始まる名前のタームにマッチしていました。 'description__like' => '',//(文字列) タームの説明に 'description__like' の文字列を含む(大文字小文字を区別して)タームを返します。デフォルトは空文字列です。説明に対してのみ、データベースクエリの LIKE '%string%' を実行します。これは説明に 'description__like' の文字列を含むタームにマッチします。 'pad_counts' => false, //(真偽値) true のとき、子孫タームすべてのカウント(投稿などのオブジェクトに付けられている回数)を合計します。 'offset' => '', //(整数) 見つかったタームの先頭から指定の個数を読み飛ばして返します。必ず 'number' と一緒に使ってください。そうしないと 'offset' は無視されて結果すべてが返されます。 'search' => '', //(文字列) ターム名にマッチさせたい文字列。ターム名とスラッグに対して、データベースクエリの LIKE '%search_string%' を実行します。これは 'search_string' の文字列を含むタームにマッチします。 'cache_domain' => 'core'//(文字列) バージョン 3.2 以上で使えます。'cache_domain' 引数は、get_terms() が作成したクエリにユニークなキャッシュ用キーを付与できます。例えば、この関数のフィルターを使ってクエリを変更するとき(例えば 'terms_clauses')、'cache_domain' にユニークな値を指定しておけば、キャッシュにある同様のクエリを上書きせず残しておけます。デフォルト値は 'core' です。 ); */ //タクソノミーアーカイブで現在のtermを取得する //カテゴリーアーカイブの場合 $nowCategory = get_category( get_query_var("cat") ); //カスタムタクソノミーアーカイブの場合 $nowTerm = get_term_by('slug', get_query_var('term'), get_query_var('taxonomy')); /* おまけ */ //タクソノミーのアーカイブリンク取得 get_term_link( $term, $taxonomy ); //WP_Term Object /* ( [term_id] => 2 [name] => 名前あああ [slug] => slug-aaa [term_group] => 0 [term_taxonomy_id] => 2 [taxonomy] => categorys [description] => [parent] => 0 [count] => 8 [filter] => raw [term_order] => 0 ) */ |
以上の内容があれば大概の状況には対応できるんじゃないかと思います。
もちろん取得方法はこれが全てではありませんので自分なりに使いやすいものを使いましょうー
WordPress