WordPress の投稿やタグ・カテゴリーなどにはカスタムフィールドと呼ばれるユーザーが自由に定義できるフィールドを追加することができる。通常は投稿画面やタグ編集画面などから設定するが、デフォルトでは REST API で扱うことはできない。
REST API でカスタムフィールドを利用するにはフィルターやアクションを記述する必要がある。このページでは WordPress の REST API でカスタムフィールドを利用する方法を紹介しよう。
WordPress の投稿 API でカスタムフィールドを利用する方法
まずは投稿を取得する際にカスタムフィールドを追加する方法から。
REST API の投稿内にカスタムフィールドを追加するには rest_prepare_POST_TYPE フィルターを利用する。投稿タイプ post で利用するには以下のような感じ。
add_filter( 'rest_prepare_post',function($response, $item, $request){
$meta_key = get_post_meta( $item->ID, 'meta_key', true );
$response->data['meta_key'] = $meta_key ?: '';
return $response;
}, 10, 3);
rest_prepare_{$this->post_type} – Hook | Developer.WordPress.org
filter 内で get_post_meta を利用してカスタムフィールドの値を取得し $response 内に値をいれてやる。このようにすると REST API で取得した JSON 内に meta_key が追加される。
REST API で投稿する際にカスタムフィールドを利用するには rest_insert_POST_TYPE アクションにフックしてやる。
add_action('rest_insert_post', function (\WP_Post $post, $request, $creating) {
$metas = $request->get_param('meta');
if (is_array($metas)) {
foreach ($metas as $name => $value) {
update_post_meta($post->ID, $name, $value);
}
}
}, 10, 3);
rest_insert_{$this->post_type} – Hook | Developer.WordPress.org
REST API で投稿する際にパラメーターに meta があればそれをカスタムフィールドとして登録する処理。
実際に投稿する際には以下のような感じ。
$response = wp_remote_post( WORDPRESS_REST_API_URL . 'posts', array(
'headers' => array(
'Authorization' => 'Basic ' . base64_encode( API_USER_NAME . ':' . API_PASSWORD ),
),
'body' => array(
'title' => 'title',
'content' => 'content',
'categories' => 'category',
'tags' => 'tags',
'meta' => array(
'meta_key' => 'meta_value',
)
)
) );
これでカスタムフィールド込みで投稿できる。
カスタム投稿タイプを利用する場合は _post と書いたところをカスタム投稿タイプで指定した名前に指定する。
WordPress のタクソノミー API でカスタムフィールドを利用する方法
タグやカテゴリーといったタクソノミーでもカスタムフィールドを扱うことができる。メソッドやフィルターなどの名前が異なるだけで基本的な記述方法は投稿と同じような感じだ。
以下がタクソノミーを取得するときにカスタムフィールドを追加するためのコード。rest_prepare_TAXONOMY フィルターを利用する。
add_filter( 'rest_prepare_tag',function($response, $item, $request){
$tag = get_term_meta( $item->term_id, 'meta_key', true );
$response->data['meta_key'] = $tag ?: '';
return $response;
}, 10, 3);
rest_prepare_taxonomy – Hook | Developer.WordPress.org
以下がタクソノミーを登録するときにカスタムフィールドも同時に登録するコード。rest_insert_TAXONOMY フィルターを利用する。
add_action('rest_insert_tag', function(\WP_Term $term, $request, $creating) {
$metas = $request->get_param('meta');
if (is_array($metas)) {
foreach ($metas as $name => $value) {
update_term_meta($term->term_id, $name, $value);
}
}
}, 10, 3);
rest_insert_{$this->taxonomy} – Hook | Developer.WordPress.org
こちらもカスタムタクソノミーを利用する場合は _tag と書いたところをカスタムタクソノミーで指定した名前に指定する。
コメント