WordPressの記事に独自項目を保存していても、その値がREST APIへ自動で出てくるとは限りません。独自項目をAPIから読むには、項目を登録し、公開する型と範囲を決めます。metaへ項目名を入れて送るだけで、どんなプラグインの設定でも読み書きできるわけではありません。
ここでは、公開用の資料ラベルを表すpractice_labelという文字列項目を、検証用サイトで登録する例を使います。顧客名、社内メモ、APIキーなどを入れる用途にはしません。show_in_restは情報をAPIへ出す指定なので、公開してよい項目かを先に判断します。
型と公開する項目を決める
投稿だけに使う独自項目は、register_post_metaの第1引数へpostを指定して登録できます。typeは値の種類、singleは単一の値として扱う指定、show_in_restはREST APIへ項目を出す指定です。
次のPHPは自分で管理する隔離した検証用プラグインに置く例です。本番サイトのテーマ編集画面へ、そのまま貼る手順にはしません。既に同じ名前の項目を別のプラグインが登録している場合も、上書きせず登録元を確認してください。
<?php
/**
* Plugin Name: Practice Public Label
*/
add_action('init', function () {
register_post_meta('post', 'practice_label', array(
'type' => 'string',
'single' => true,
'default' => '',
'sanitize_callback' => 'sanitize_text_field',
'auth_callback' => function ($allowed, $meta_key, $post_id) {
return current_user_can('edit_post', $post_id);
},
'show_in_rest' => true,
));
});
この例のauth_callbackは対象記事を編集できる人かを確認するためのものです。これを置いたから、公開記事の独自項目を認証なしで読めなくなるとは考えないでください。公開範囲の判断と、更新する権限の判断を分けます。
登録後の応答を読む
検証用記事42に、別の許可された手順でラベル「月次集計」を保存した場合、編集用のGETで値を確認します。_fieldsを使うならmetaも取得項目へ含めます。
GET /wp-json/wp/v2/posts/42?context=edit&_fields=id,meta
応答例は次の形です。42とラベルは架空の確認用データで、このページの作成時に実サイトへ登録した値ではありません。
{
"id": 42,
"meta": {
"practice_label": "月次集計"
}
}
保存していない状態では、この登録例の既定値は空文字列です。空だったという結果だけで、保存に成功したとは判断しません。送った値と読み戻した値が一致するか、同じ記事IDを見ているかを照合します。既存のメタ項目を扱う場合は、その登録元が定める型や既定値も確認します。
項目が見えないときの順番
まず登録コードが実行されているか、postなどの投稿タイプが一致するか、show_in_restが指定されているかを確認します。カスタム投稿タイプではcustom-fieldsの対応も必要です。取得側で項目を絞っていないか、認証と編集権限が合っているかも見ます。
SEOプラグインの独自項目などは外部へ公開する前提になっていないことがあります。見えない項目を表示させるために、そのプラグインの登録を一律に変える方法は取りません。必要な値を正式に扱う方法があるか、登録元の資料を確認します。
このサンプルはWordPressの登録方法を説明するためのものです。PHPの構文と登録へ渡す設定は手元で確認しますが、実際のWordPress上で権限、保存、公開応答まで確かめた結果ではありません。利用する場合は検証用記事を用意し、公開GETと認証付きGETの両方で、意図した情報だけが見えるかを確認してください。
関連する記事
WordPressのSEOメタを整える考え方|タイトル・説明文・OGP
WordPress REST APIでできること|全体像と始め方
公式資料
Modifying Responses – REST API Handbook | Developer.WordPress.org
