どうもこんばんは!色々理由をつけて好きな事を優先して気が乗らないものは後回しするこうじです^^

よくタクソノミーを取得してゴニョゴニョする。タームを取得してゴニョゴニョするというのはよくやるんですが、投稿に紐づいたタクソノミーを取得するってした事なかったんですよね。

いざやってみるとプチハマったので、全プチハマりさんの為に備忘録しておきたいと思います。

Get taxonomiesを使う

get_taxonomies()は、登録済みのタクソノミーを取得する事ができます。

こちらのオプションを使って投稿に紐づいたタクソノミーを取得する事が可能です。

パラメーターの「object_type」の部分を任意のカスタム投稿名に変えれば指定したカスタム投稿のデータを取得する事が可能です。
指定は配列で指定します。普通に文字列で指定すると残念な結果になります。

投稿に紐づいたタクソノミーのスラッグを取得

6$taxonomies = get_taxonomies([
    // 公開されているタクソノミーのみに限定。
    'public' => true,

    // 投稿タイプが「post」のタクソノミーに限定。
    'object_type' => [ 'post' ],

    // 「カテゴリー」とか「タグ」とか最初から登録されているタクソノミーは出力しない。
    '__builtin' => false,
]);

// 出力結果
// array(1) {
//     ["post-taxonomy"]=>
//     string(12) "post-taxonomy"
// }

投稿に紐づいたタクソノミーのデータを取得

タクソノミーをデータで取り出したい場合は2番目の引数にobjectsをセットします。

// 投稿に紐づいたタクソノミーのスラッグを取得。
$taxonomies = get_taxonomies([
    'public' => true,
    'object_type' => [ 'post' ],
], 'objects');

// 出力結果
// array(1) {
//     ["post-taxonomy"]=>
//     object(WP_Taxonomy)#5339 (27) {
//         ["name"]=>
//         string(12) "post-taxonomy"
//         ["label"]=>
//         string(30) "投稿に登録したタクソノミー"
//         ["labels"]=>
//         object(stdClass)#5344 (24) {
//             ["name"]=>
//             ...
//         }
//     }
// }

まとめ

意外にニーズがある気がするんですが、いざ探してみると現在の記事のタクソノミーや、普通にタクソノミーを取得するとかしかこないので、びっくりしました。

まぁでも普通にテーマ突っ込んでブログ書くくらいなら使わんよね^^;
今回、受託案件で必要だったので、その備忘録でした。

参考サイト