私にもありました。Wordpressでの一覧呼び出しはJs+RestAPIが正義だと思っていた時代が。。。
皆さんはWP REST APIを使用したことがありますか?
json形式で投稿を扱えるのですごく便利なのですが、「この情報が含まれていないからエンドポイントに追加したい」ということが割りと起こります。
特にカテゴリーはidしか含まれていないので、取得後、さらにカテゴリー名を取得しに行くという2度手間が発生します。
そこで今回はWP REST APIのエンドポイントにカテゴリー名やカテゴリーに付随する情報を追加してみましょう。
# この記事で解決すること
- WP REST APIのエンドポイント(post_type)にカテゴリー名を挿入することができる
- WP REST APIのエンドポイント(post_type)にカテゴリーに付随する情報を挿入することができる
前提
今回はカテゴリーのname
,slug
,link
,custom_field
をpost_typeのエンドポイントに追加することとします。
対象
- WP REST APIを使用している方
- REST APIのデータをphp側で処理しておきたい方
編集ファイル
- theme_name
- functions.php
手順
- カテゴリーの情報を取得する
- 任意のエンドポイントに情報を追加
- 確認
カテゴリーの情報を取得する
functions.php
// $object = 投稿のデータ
function get_category_info( $object ) {
// returnする配列の初期化
$categories = array();
// 投稿に紐づくカテゴリーの情報取得
$category = get_the_category($object['id']);
// 投稿に紐づくカテゴリーを一つずつ処理
foreach ($category as $k => $v) {
$categories[$k]['name'] = $v->cat_name; // category_name
$categories[$k]['slug'] = $v->slug; // category_slug
$categories[$k]['link'] = get_category_link($v->term_id); // category_link
// 例えばACFでカテゴリーに'color'設定している場合
if(get_field('color','category_'.$v->term_id)) {
$categories[$k]['color'] = get_field('color','category_'.$v->term_id);
}
}
// 必要な部分だけ取り出したカテゴリーの情報をreturn
return $categories;
}
後述しますが、2行目の$object
にはとりあえず投稿のデータが入るんだと思っておいてください。
array_push
していないのは、無駄な処理を増やしたくなかったからです。
あとはすごく単純なカテゴリー情報の処理ですね。
任意のエンドポイントに情報を追加
では、上記で取得した情報をpost_typeのエンドポイントに追加します。
今回はわかりやすいようにpost
にしておきます。
functions.php
add_action( 'rest_api_init', 'register_category_info' );
function register_category_info() {
register_rest_field( 'post', 'category_info',
array(
'get_callback' => 'get_category_info'
)
);
}
rest_api_init
に対してアクションフックをかけます。
あとはregister_rest_field
でpost
のエンドポイントに対してcategory_info
を追加して、その中に前項のget_category_info
で取得した情報を代入しています。
post
のcallback
に投稿データが紐づいているので、$object
=投稿データとなります。
これでpostのエンドポイントにカテゴリーの情報を追加することができました。
確認
念のために確認しておきましょう。
※カスタムフィールドはあくまで記述例ですので、今回の実装には含まれません。
既存のcategories
とは別にcategory_info
があるのがわかりますね。
最後に
私は1周してPHPでの取得に戻っていますが、仕様によってはどうしてもREST APIを使用しなければいけないこともあります。
REST APIは使い方さえ覚えればすごく楽しく扱うことができます。
MovableTypeでもData APIがあり、REST APIは今後も発展していくんでしょうね。
では皆様よいWPライフを!