非エンジニアがClaude Codeを相棒にWordPressサイトの自動化を進めていると、「管理画面ではちゃんと入力できるのに、プログラムからは値が取れない」という項目に出会うことがある。今回はその正体と直し方を、実際につまずいた順番のまま残しておく。
何が起きていたか
WordPress側で、記事ごとに「検索結果に出したいタイトル」を本文の見出しとは別に設定できる項目を使っていた。管理画面の投稿編集画面には入力欄がちゃんとある。
一方でClaude CodeにWordPress REST API経由で記事データを取得させると、この項目の値だけがレスポンスに含まれない。他のメタ情報は普通に取れているのに、この項目だけが最初から無かったかのように扱われる。
原因はカスタムフィールドの公開設定
WordPressの「カスタムフィールド」という仕組みで、記事本体とは別に自由な項目を追加できる。今回の「検索結果用タイトル」もこの仕組みで実装されていた。
ポイントは、カスタムフィールドは追加しただけではREST APIに一切出てこないという仕様だった。WordPress側に「このフィールドはAPI経由で読み書きしてよい」という許可を個別に与える必要があり、この許可が抜けていると、管理画面上は普通に使えるのにAPI経由では完全に見えない状態になる。
直し方: register_post_meta に1行足す
WordPress本体やテーマのファイルを直接いじるのは、更新のたびに消える可能性があるため避けたい。代わりに「must-useプラグイン」という、常に読み込まれる小さな追加コード置き場を使う。
やることは、対象のカスタムフィールドにshow_in_restをtrueに設定するだけ。
register_post_meta( 'post', 'my_custom_field', array(
'show_in_rest' => true,
'single' => true,
'type' => 'string',
'auth_callback' => function() {
return current_user_can( 'edit_posts' );
},
) );
WordPressの初期化フックの中でこの関数を呼ぶと、対象カスタムフィールドがREST APIのmeta欄に現れるようになり、取得も更新もできるようになった。
auth_callbackは「誰がこのフィールドを読み書きできるか」を決める条件。今回は記事編集権限を持つユーザーに限定している。ここを省略すると未ログインの誰でも読める設定になってしまうため、必ず指定した方がいい。
まとめ
| 症状 | 原因 | 対処 |
|---|---|---|
| 管理画面の項目がREST APIに出てこない | カスタムフィールドのshow_in_restが未設定 |
register_post_metaでshow_in_rest: trueを明示的に指定する |
WordPressの管理画面とAPIで「見えているものが違う」状態は気づきにくく、原因の切り分けに時間がかかりがちだと感じた。同じ現象で足止めされている人の助けになれば幸い。
元記事: https://kujiragames.com/2026/08/expose-custom-field-to-api/