カテゴリの取得と一口に言っても方法はたくさんあります。情報も今や豊富になりました。
数多ある取得方法のどれが良くてどれがダメなのか、これのここはいいんだけどそこはちょっと…、などなど、疑問ご意見は尽きないことと思います。
そこで、これだけは覚えておいて使いこなしたい! というカテゴリの取得方法を5個に厳選し、それぞれの得手、不得手を整理してみました。
あれ、5個もあるのってひいていますか? もっとあるんですよ、本当は……。
それでは早速見て、使っていきましょう。
タグの詳細情報はリファレンスの王道Wordpress Codex日本語版をご参照下さい。
1.言わずと知れたget_the_category()
タグの詳細情報※Wordpress Codex日本語版より
get_the_category()はカテゴリ情報取得においては王道というか、ベタなタグです。
最大の利点は、当該投稿のカテゴリ情報がごっそりと「配列」で取得できることです。
【使い方】
カテゴリIDを取得する
1 2 3 4 5 6 7 8 9 |
$cats = get_the_category($post->ID); //特定の投稿記事のカテゴリ情報を取得。 foreach($cats->$cat): $catID = $cats->term_id; // foreachで配列内のすべてのカテゴリIDを取り出す。 echo $catID; //カテゴリIDを呼び出し。 endforeach; ?> |
ただ、ベタなタグだけに以下の様な間違いが起こりやすいです。
【よくある間違い】
・「配列」で情報が取れてくることを失念し、値として扱う。
・『「カテゴリ」情報がとれる』の意味を理解していないために、「カテゴリ(カスタムタクソノミー)の値がとれてこない!と憤慨する。
【間違い回避策】
・get_the_category()でとれた値を「var_dump()」で検証してみましょう。
・Wordpressにおける「カテゴリ」が何を意味しているか、しっかり把握しましょう。合わせて「カスタムタクソノミー」についても覚えましょう。
get_the_category()の大きな欠点は「投稿」の「カテゴリ」の情報しか取得できないことです。カスタム投稿で使用しているカテゴリ(これがカスタムタクソノミーになります)情報については門外漢なのです。
2.使うようで意外と使わない!? get_categories()
タグの詳細情報※Wordpress Codex日本語版より
カテゴリ情報を「配列」で取得できるタグはまだあります。get_categories()がそうです。
get_the_category()との大きな違いは、WP_Queryなどでよく使う「クエリ文字列形式」を引数に取れるところです。また、投稿全体のカテゴリ情報をどんっと取得できます。
Wordpress Codex日本語版のパラメータの項をジーっと読んでみてください。実に多様な条件設定ができます。カテゴリを並べ替えて出力するのもお手のものです。
このタグは情報を加工して出力したいときにとても重宝します。
このタグが最も力を発揮する時、それはカテゴリ一覧を作成するときです。
作業は簡単です。WP_Queryのメインループを作成した時のことを思い出して下さい。
手順はそれによく似ています。
A: get_the_category()でカテゴリ情報を取得します。この時取得情報は配列になります。
B: foreach文で配列の情報を一つ一つとりだします。カテゴリ名、カテゴリID、お好きなものを取り出しましょう。
手順はこれだけです。簡単ですね。
【使い方】
間違いやすいポイントは1.のget_the_category()と同じで、タグで取得した値が配列になっているところと、カスタムタクソノミーの情報は取得できない点です。 こまめにvar_dump()して、取得した値を検証しましょう。
3.get_categories()のカスタムタクソノミー版、get_terms()
タグの詳細情報※Wordpress Codex日本語版より
get_terms()は指定したカスタム投稿の「カスタムタクソノミー(カスタム分類)」の持つ「ターム(タクソノミー情報)」の取得ができます。
get_terms()もやはりクエリ文字列形式$argsを使用します。ただし第二引数で使用します。このタグは引数を2つ取り、第一引数にはタクソノミー名を渡します。
【使い方】
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 |
$tax = array( 'tax_test', 'tax_exp' ); //ここまで第一引数、タクソノミー名の指定。 $args = array( 'order' => 'ASC', //昇順に 'fields' => 'all', //すべてのタームオブジェクトを 'slug' => 'food', // スラッグがfoodのものについて ); //ここまでタクソノミー情報取得条件。 $terms = get_terms( $tax, $args ); //$argsで指定したタクソノミー情報を取得。 foreach ($terms as $term): echo $term->term_id; タクソノミー情報からタームIDを取得し、呼び出す。 endforeach; ?> |
【よくある間違い】
・$argsを指定したのに想定した値が返ってこない!
【間違い回避策】
・引数は2つです。片方を忘れていませんか?
2つわたしてあげて下さい……。
4.一気に2つご紹介、カスタムタクソノミー情報の取得ならやはりこれ!get_the_terms() とget_term_by()
タグの詳細情報※Wordpress Codex日本語版より
WordPressにおける「分類(タクソノミー)」のなかの「情報(ターム)」を取得できます。
get_term_by()はget_query_var()と組み合わせることでループ外でのタクソノミー情報の取得が可能になり、便利です。
ではget_the_terms() とget_term_by()は何が違うのか、見ていきましょう。
A: get_the_terms()
こちらは当該投稿記事のタクソノミー情報を取得する際に使用します。ループ内でよく見かけます。やっていること自体は
get_the_category()に似ているけれども、こちらはカスタム投稿のタクソノミー情報を取得する際に使用します。
B: get_term_by()
これは特定のフィールドから指定した条件に該当するタームの情報を取得します。ループ外でのカテゴリ取得をするとき非常に便利です。
【よくある間違い】
・get_the_category()と混同してしまい、引数を渡すことを失念してしまう。
【間違い回避策】
・get_term_by()では次の3つの引数を渡してあげて下さい。必須です。
5.おわりに
カテゴリ取得で頻出なのが
get_the_category()、get_the_terms()、get_term_by()ではないでしょうか。
そしてそれに続くのがget_categories()とget_terms()かと思います。
この5つがあれば大抵のカテゴリ取得に対応できます。
蓋を開けてみたら超基本のタグラインナップで、がっかりした方もいるでしょう。
一方でWordpressフォーラムやブロガーの方の間では今でもこれらのタグについて意見が飛び交っています。
有名なタグ。だからといって皆が皆、使いこなせているわけではないようです。
いろいろな記事を見て思うことはひとつ。筆者も含めてタグに関して基本的な知識が抜けているなということです。様々なサイトを参考にし、ソースをコピーアンドペーストして、動いたぞ、やった!と問題を締めくくれる例は現場ではさほど多くはないと思うのです。
そんな時に生きてくるのが真の知識。ここの引数は何なんだ、そもそもこのタグってどんな動きをしているの?そういった根本的な知識を得ているか否かで、トラブル解決の早さ、精度は異なってくるのではないでしょうか。
いきなり全てのタグについて、知識を深めるのは大変なこと。よく使うカテゴリに関連するタグからでも、基礎知識を深めてみませんか?
【この記事に出てくるキーワード】
・カテゴリ…Wordpressでの「カテゴリ」は投稿タイプ「投稿(post)」の中にある「カテゴリ(category)」のことを指します。カテゴリのタクソノミーは「category」です。
・タクソノミー…Wordpressにおいてはカスタム投稿、投稿における「分類」のことをいいます。例えば、「投稿」内のタクソノミーには上述の「カテゴリ(category)」、「タグ(tag)」があります。これらタクソノミー名は変更不可です。一方カスタム投稿ではタクソノミーの命名は比較的自由にできます。
・ターム…タクソノミーの持つ情報のことを指します。「カテゴリ」を例に取ると、カテゴリID、カテゴリスラッグ、カテゴリ名などがタームになります。
・var_dump()…()内の変数、式に関する情報を返すPHP 関数です。変数に値がちゃんとあるかどうか、データの型はなにか、等々をごっそり返してくれます。デバッグに必須の関数です。
- 3015 views
- Late ran公式