get_categories、get_termsでカテゴリとタクソノミーのターム一覧の編集方法
2017/03/12
get_categories()関数と get_terms()関数
カテゴリやタクソノミーのターム一覧を取得する関数
WordPressのカテゴリやカスタムタクソノミーのターム一覧を取得する関数は複数存在しています。
例えば、「wp_list_categories()」関数。
これは、一覧として HTMLのタグも含めて編集してくれる関数ですので、サイドナビゲーションのウィジェットなどにターム一覧を編集する場合に最適です。
それを利用した表示については下記に記事を書いています。
カスタムタクソノミーのターム一覧をウィジェットにショートコードで編集
タクソノミーの一覧をショートコードで編集・ソート機能付き・wp_list_categories
逆に、タームの情報を一覧として表示するのではなく、配列やオブジェクトとして取得して加工して利用する場合には「get_categories()」関数、「get_terms()」関数が便利です。
「get_categories()」関数と「get_terms()」関数は取得できる値は同じですが、指定できる値の取得条件は「get_terms()」関数の方が多いため、「get_terms()」関数を使う方がよさそうです。
「get_categories()」関数は、カテゴリの値を取得するのに便利なように作られていますが、処理としても内部で「get_terms()」関数を呼び出していますので、「get_terms()」関数を使えるようになっておく方がよさそうです。
ということで、この記事では「get_terms()」関数を使ったサンプルを紹介します。
タクソノミーのタームを取得して加工する一例
例として、カスタムタクソノミーを条件に検索システムを作りたい、と思った場合の検索条件側を設定する方法です。
非常に限定的な例ですが(笑)、検索処理を作る場合はカスタムタクソノミーを検索条件にしたいという場合は多いんじゃないかと思います。
早い話が現在そういうシステムを作っていますので、それの作り方の紹介記事ですね。
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 63 64 65 66 67 68 |
// タクソノミーのタームを取得 $terms_order = get_terms ( "ss_category", array ( 'orderby' => 'term_order', 'order' => 'ASC' ) ); // 親タームと子供のタームに分解 foreach ( $terms_order as $term ) { if ( $term -> parent == "0" ) { $parents_object[] = $term; } else { $children_object[] = $term; } } // 親カテゴリー(親ターム) foreach ( $parents_object as $parent ) { if ( isset ( $_POST["chk_category"] ) ) { if ( in_array ( $parent -> slug, $_POST["chk_category"] ) ) { $checked_text = " checked"; } else { $checked_text = ""; } } echo "<br>\n" . '<input type="checkbox" name="chk_category[]" value="' . $parent -> slug . '"' . $checked_text . '>' . $parent -> name; // 子カテゴリー(子ターム) $child_flg = ""; foreach ( $children_object as $child ) { if ( $parent -> term_id == $child -> parent ) { if ( $child_flg != 1 ) { echo ' - '; } if ( isset ( $_POST["chk_category"] ) ) { if ( in_array ( $child -> slug, $_POST["chk_category"] ) ) { $checked_text = " checked"; } else { $checked_text = ""; } } echo '<input type="checkbox" name="chk_category[]" value="' . $child -> slug . '"' . $checked_text . '>' . $child -> name . " "; $child_flg = 1; // 孫カテゴリー(孫ターム) $child_flg2 = ""; foreach ( $children_object as $child2 ) { if ( $child -> term_id == $child2 -> parent ) { if ( $child_flg2 != 1 ) { echo ' - '; } // if ( isset ( $_POST["chk_category"] ) ) { if ( in_array ( $child2 -> slug, $_POST["chk_category"] ) ) { $checked_text = " checked"; } else { $checked_text = ""; } } echo '<input type="checkbox" name="chk_category[]" value="' . $child2 -> slug . '"' . $checked_text . '>' . $child2 -> name . " "; $child_flg2 = 1; } } } } } |
これを編集するファイルは、「archive.php」などの一覧ページになります。
一覧ページは、カテゴリごと、タクソノミーごとのテンプレートファイルも作成することができますので「WordPressの一覧ページのテンプレートの種類とファイルの設定」を参考にしてください。
「get_terms()」関数の親子タームを取得する「parent」パラメータを使用して取得する方法も考えました。こちらは子タームまでの取得ですが。
こちらの方がスマートな書き方になると思って書き始めましたが、「get_terms()」関数を何度も実行するため、処理は遅くなると思います。
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 |
// 親ターム取得 $parents_object = get_terms ( "ss_category", array ( 'orderby' => 'term_order', 'order' => 'ASC', 'parent' => 0 ) ); foreach ( $parents_object as $parent ) { if ( isset ( $_POST["chk_category"] ) ) { if ( in_array ( $parent -> slug, $_POST["chk_category"] ) ) { $checked_text = " checked"; } else { $checked_text = ""; } } echo "<br>\n" . '<input type="checkbox" name="chk_category[]" value="' . $parent -> slug . '"' . $checked_text . '>' . $parent -> name; // 子ターム取得 $children_object = get_terms ( "ss_category", array ( 'orderby' => 'term_order', 'order' => 'ASC', 'parent' => $parent -> term_id ) ); if ( ! empty ( $children_object ) ) { echo "("; $child_flg = ""; foreach ( $children_object as $child ) { if ( isset ( $_POST["chk_category"] ) ) { if ( in_array ( $child -> slug, $_POST["chk_category"] ) ) { $checked_text = " checked"; } else { $checked_text = ""; } } if ( $child_flg ) { echo " "; } echo '<input type="checkbox" name="chk_category[]" value="' . $child -> slug . '"' . $checked_text . '>' . $child -> name; $child_flg = "1"; } echo ")"; } } |
「get_categories()」関数と「get_terms()」関数の違い
「get_categories()」と「get_terms()」は、いずれも条件を設定し、その条件に合致するタクソノミーのタームを取得する関数です。
ですが、パラメータの指定の方法が少し違うことと、指定できるパラメータの数が違います。
「get_categories()」と「get_terms()」のパラメータの指定の方法
「get_categories()」と「get_terms()」の標準形は以下の通り。
1 2 3 4 5 |
// get_categories()関数 get_categories ( $args ); // get_terms()関数 get_terms ( $taxonomies, $args ); |
それぞれパラメータを指定する配列の例としては以下の通り。
「$taxonomies」は 1つのみの指定の場合は配列でなくても OKです。
1 2 3 4 5 6 7 8 9 10 |
// $args指定の一例 $args = array ( 'orderby' => 'name', 'order' => 'ASC', ); // $taxonomies指定の一例 $taxonomies = 'ss_category'; // $taxonomies指定の一例 $taxonomies = array( 'ss_category', 'ss_area', ); |
「get_categories()」と「get_terms()」の両方が指定できる項目
taxonomies
タームを取得するタクソノミーを指定します。
get_categories()関数の場合は「category」がデフォルトになります。
orderby
ソートするフィールドを指定します。デフォルトは「name」です。
order
ソートする順番を指定します。デフォルトは「ASC」です。
hide_empty
属する投稿がないタームを取得するか否かを指定します。
exclude
除外するターム IDを配列で指定します。
include
取得対象にするタームを IDの配列で指定します。指定がない場合はすべてのタームが対象になります。
number
取得するタームの最大数を指定します。指定がない場合は全件取得します。
parent
親タームの IDを指定し、直近の子(1レベル下の)タームを取得します。「0」を指定するとトップレベルのタームのみを取得します。
hierarchical
子タームを持つタームを取得するか、否かを指定します。デフォルトは「1(true)」で、子タームを持つものも取得します。
child_of
指定したタームの全ての子孫のタームを取得します。
「parent」は 1レベル下のタームしか取得しませんが、「child_of」はすべての子孫を取得します。
pad_counts
子孫のタームの投稿数のカウントを合計するか、否かを指定します。デフォルトは「0(false)」で合計しません。
「get_terms()」のみ指定できる項目
exclude_tree
親タームを指定してそれに属するターム全てを除外する場合に指定します。
fields
取得するフィールドを指定します。デフォルトは「all」で全項目を取得します。
slug
取得するタームの slugを指定します。
childless
階層を持たないタームのみを取得します。
get
「all」を指定すると「hide_empty」と「child_of」の指定が無効になります。
name__like
ターム名にマッチさせたい文字列を指定します。ターム名に対して「LIKE ‘%string%’」の部分一致検索を実行します。
description__like
タームの説明にマッチさせたい文字列を指定します。タームの説明に対して「LIKE ‘%string%’」の部分一致検索を実行します。
offset
取得できるタームの何番目から取得するかを指定します。「number」と一緒に使わないと無視されます。
search
ターム名、slugにマッチさせたい文字列を指定します。ターム名、slugに対して「LIKE ‘%string%’」の部分一致検索を実行します。
cache_domain
クリエをキャッシュする場合に指定します。
「get_categories()」関数と「get_terms()」関数で取得できる値
「get_categories()」関数と「get_terms()」関数では、以下のようなオブジェクトとして値が取得できます。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 |
Array ( [0] => stdClass Object ( [term_id] => 16 // タームID [name] => レジャー施設 // タームの名称 [slug] => ss_leisure // タームのslug [term_group] => 0 // タームのグループ [term_order] => 1 // Category Order and Taxonomy Terms Orderで設定した順番 [term_taxonomy_id] => 16 // タームID [taxonomy] => ss_category // タームが属するタクソノミーの slug [description] => // タームの説明 [parent] => 0 // タームの親のタームID。「0」は親ターム。 [count] => 5 // タームに含まれる記事の件数 ) ) |
「get_categories()」関数と「get_terms()」関数のリファレンス
「get_categories()」関数と「get_terms()」関数のオフィシャルサイトのリファレンスは以下の場所にそれぞれあります。
get_categories()関数は、
https://wpdocs.osdn.jp/関数リファレンス/get_categories
get_terms()関数
https://wpdocs.osdn.jp/関数リファレンス/get_terms
また、リファレンスには関数の設置場所も記載がありました。
get_categories()関数は、
wp-includes/category.php にあります
get_terms()関数
wp-includes/taxonomy.php にあります
カテゴリーやタクソノミーに関連する関数について
最後に今回は使いませんでしたが、カテゴリやタクソノミーに関連する関数について書いておきます。
the_category()
ループ内で使用して、投稿が属するカテゴリを HTMLに編集された形で取得します。
get_the_category()
PostIDを指定して、カテゴリの情報を配列で取得します。
wp_list_categories()
条件を指定して条件に合致したカテゴリ、タクソノミーの一覧を HTMLに編集された形で取得します。
get_category_link()
カテゴリIDからカテゴリ名とリンクを取得します。
get_cat_ID()
カテゴリ名からカテゴリIDとリンクを取得します。
get_category_by_slug()
slugからカテゴリ名とカテゴリのリンクを取得します。
get_the_term_list()
PostIDを指定して、タクソノミーの情報を HTMLに編集された形で取得します。
get_the_terms()
PostIDを指定して、タクソノミーの情報を配列で取得します。
GoogleAdwords
GoogleAdwords
この記事が参考になったと思いましたらソーシャルメディアで共有していただけると嬉しいです!
関連記事
-
WordPressのSEOタイトル、キーワード、ディスクリプション編集解説
ヤフーやグーグルの検索結果を見ながらSEO視点でタイトル、ディスクリプションを書く際の基準を解説!スマホ対策も解説!
-
テキストエディタ秀丸で正規表現による置換の方法の解説
秀丸で正規表現による置換を行うポイントを紹介。置換をしながら特定のキーワードは置換せずに置換結果に残す方法を実例を上げながら解説しています。
-
WordPressで月極駐車場検索サイトを構築し無料公開・使ったプラグインの紹介も
月極駐車場を検索するシステムをWordPressで構築。そのアナウンスと構築するために利用したプラグインの紹介。構築にどれくらいの期間がかかるのかの紹介。
-
Custom Post Type UIでカスタム投稿を設定し編集する方法解説
カスタム投稿を追加、管理するプラグインCustom Post Type UIの使い方の解説です。プラグインの解説ではあるものの、カスタム投稿の仕様の解説でもあります。
-
wp_mail()関数でWordPressのスパム対策済のメールフォーム作成
WordPressでメール送信フォームを作成するための関数「wp_mail()」の使い方の解説。CC、BCC、添付ファイルも HTMLメールも設定可能。
-
WP Multibyte PatchでWordPressの管理画面のイタリック体を解消
管理画面の一部の文字がイタリック(斜体)になっているのはプラグイン「WP Multibyte Patch」が有効になっていないためです。日本語を使うには必ず有効化しましょう。
-
WordPress・Contact Form7、MW WP Form共通 細かなデザイン調整方法
お問い合わせフォームプラグインの Contact Form7、MW WP Formにおけるラジオボタン、チェックボックスなどの見た目を調整する小技を紹介。
-
BackWPupでバックアップ・設定したJobの実行、ファイル一覧
BackWPupその4。バックアップ設定した Jobを実行する方法、ログの一覧、保存されたファイル一覧の解説です。
-
Google Code Prettifyの設定方法を解説。 Syntax Highlighterから乗換え、高速化にも最適
Google Code Prettifyでソースコードをきれいに編集する方法の解説。簡単設置とカスタマイズ設置の2つの方法を解説し、カスタマイズするポイントも解説。
-
SyntaxHighlighterの設定、カスタマイズ方法を解説。Crayonから乗換え、高速化にも最適
SyntaxHighlighter 3の設置方法、各機能の設定方法、オプション、デフォルト設定の変更方法を解説。Crayonから乗り替えるならこれしかない。