外部システムからWordPressの投稿記事データを取り出すには、WordPress REST APIを使います。投稿記事データがJSONデータで返ってきます。しかし、カスタムフィールドはJSONデータに入っていないんですね。カスタムフィールドをJSONデータに含めて返すWordPressプラグインを調べました。
ACF to REST API
プラグインを追加、キーワード「REST API Custom Fields」で検索したら、1ページ目4番目以内に表示されました。
JSON出力
通常のREST APIのURL http://localhost/wp-json/wp/v2/posts/2
にリクエストすると、JSONの"content"や"title"と同じレベルの、"acf"キー下に、カスタムフィールドが出力されました。
アンダーバー始まりのカスタムフィールドは表示されません。
{
省略
"content": {
"rendered": "<p>なにか</p>",
"protected": false
},
省略
"acf": {
"my_text1": "xxxx"
},
省略
}
Code language: plaintext (plaintext)
また、このプラグイン専用のREST URL http://localhost/wp-json/acf/v2/post/2 にリクエストすると、カスタムフィールドだけをJSON出力することができます。
{
"acf": {
"my_text1": "xxxx"
}
}
Code language: plaintext (plaintext)
設定
このプラグイン専用のREST URLは、v2とv3があります。
プラグイン「ACF to REST API」のSettingリンクをクリックすると、設定>パーマリンク設定の一番下に移動して、v2 や v3 を選択できます。
新規・編集
githubのREADMEのField Settingsの項目、Editing the fieldsの項目を見ると、このプラグインとAdvanced Custom Fieldsプラグインを使っている場合、REST APIにPOSTすることで、カスタムフィールドを新規追加、編集することができます。
REST API Custom Fields
プラグインを追加、キーワード「REST API Custom Fields」で検索したら、1ページ目2番目に表示されました。
JSON出力
通常のREST APIのURL http://localhost/wp-json/wp/v2/posts/2
にリクエストすると、JSONの"content"や"title"と同じレベルに、カスタムフィールドが出力されます。
設定ページで、カスタムフィールドごとに出力するしないを設定することができます。
{
省略
"content": {
"rendered": "<p>なにか</p>",
"protected": false
},
省略
"_encloseme": "1",
"_thumbnail_id": "",
"_wp_desired_post_slug": "",
"_wp_trash_meta_comments_status": "",
"my_text2": "",
"my_text2111": "",
"_edit_last": "1",
"_edit_lock": "1598748453:1",
"_wp_trash_meta_status": "",
"_wp_trash_meta_time": "",
"my_text1": "xxxx"",
"_my_text1": "field_5f4af58a0f382",
省略
}
Code language: plaintext (plaintext)
設定
設定>Rest API Custom Fields を表示すると、Posts、Comments、Users、Termsのカスタムフィールド一覧が表示されます。チェックをつけたカスタムフィールドが、REST APIのJSONに出力されます。
プラグインのインストール直後は、チェックがついていないので、JSONに出力されません。
インストール直後、REST APIのJSONにカスタムフィールドがでてこないから、焦ったよ
設定で、表示したいカスタムフィールドにチェックをつけるのね
WP REST API POST/ PAGE CUSTOM FIELDS
プラグインを追加、キーワード「REST API Custom Fields」で検索すると、2ページ目11番目に表示されました。
JSON出力
JSONの"content"や"title"と同じレベルの、"metadata"キー下に、カスタムフィールドが出力されます。
"metadata"キー下は、get_post_meta($id)の戻り値です。
投稿、固定ページ、どちらも動作確認しました。ソースを見ると、投稿タイプpage、post、user、taxonomieに対応しているようです。
{
省略
"content": {
"rendered": "<p>なにか</p>",
"protected": false
},
省略
"metadata": {
"_encloseme": [
"1"
],
"_edit_lock": [
"1598752509:1"
],
"_edit_last": [
"1"
],
"my_text1": [
"taro"
],
"_my_text1": [
"field_5f4af58a0f382"
]
},
省略
}
Code language: plaintext (plaintext)
機能は少ないかわりに、ソースは短いから、理解しやすいわね
WP REST API Custom Fields
プラグインを追加、キーワード「REST API Custom Fields」で検索すると、2ページ目19番目に表示されました。
残念ながら、REST APIのJSONレスポンスに、カスタムフィールドはありませんでした。
しばらくアップデートされていないから、しかたないわね