AIとREST APIの組み合わせは非常に便利ですが、編集できないと思っていた部分も実は編集できます。
Pochipp(ポチップ)もその一つです。
たとえばポチップの商品データは、WordPressのカスタム投稿タイプ pochipps の投稿1件として保存されています。
商品の中身(ASIN・価格・画像・リンク)は、その投稿のカスタムフィールド pochipp_data にJSON文字列ひとつとして入っています。
つまり WordPress REST API で読めるし、書けるということです。
管理画面を開かずに、
- 全商品の価格を一括で入れ直す
- 間違った商品を指しているリンクをまとめて差し替える
- 商品を新規登録して、記事にブロックを差し込む
がスクリプトからできます。
数百件から千件規模でも、一晩あれば直せます。
ただし、そのままやると引っかかる場所がいくつかあります。
先にそこを共有します。
なぜREST APIなのか
ポチップの管理画面は、1件ずつ商品を検索して登録する作りです。
10件なら手で足ります。
たとえば1つの対象につき商品を2件、3件と並べるサイトなら、扱う対象の数がそのまま商品数になります。
数百件を超えたあたりから、管理画面での作業は現実的でなくなります。
さらに厄介なのが、登録済みの商品が別の商品を指している場合です。
| 出したかった商品 | 実際にリンクしていた商品 |
|---|---|
| シリーズ本編の1巻 | 同シリーズの前日譚 1巻 |
| シリーズ本編の1巻 | 同シリーズのスピンオフ 1巻 |
| シリーズ本編の1巻 | 同作のノベライズ版 |
| シリーズ本編の1巻 | 同作の公式イラスト集 |
これを手作業で直す気にはなれません。
該当するものを特定して、正しい商品コードを引き直して、データを差し替える。
全部スクリプトの仕事です。
ポチップの商品データはどこにあるか
構造はとてもシンプルです。
カスタム投稿タイプ pochipps 投稿タイトル 商品名(管理画面の一覧に出る名前) カスタムフィールド pochipp_data ← JSON文字列。中身が全部ここREST APIのエンドポイントは /wp-json/wp/v2/pochipps です。
普通の投稿と同じ扱いで、一覧も個別取得も更新も作成もできます。
pochipp_data を取り出すと、こういう形のJSONが入っています。
{ "asin": "4000000004", "amazon_affi_url": "https://www.amazon.co.jp/dp/4000000004?tag=...", "image_url": "https://m.media-amazon.com/images/I/....jpg", "price": "759", "price_at": "2026/09/08 15:38", "info": "著者名", "showPrice": true, "hidePrice": false, ...}見た目より素直です。
このJSONを書き換えて戻せば、記事の表示がそのまま変わります。
記事側はどうなっているか
記事本文には、商品そのものではなくIDへの参照が入っています。
<!-- wp:pochipp/linkbox {"pid":8107,"isCount":true,"cvKey":"a1b2c3d4"} /-->pid が商品投稿のIDです。
商品側を直せば、その商品を貼っている全記事の表示が一斉に変わります。
逆に言えば、記事を作り直さなくても商品だけ更新すれば済むということです。
価格を毎週入れ直すような運用ではここが効きます。
先に言っておく、つまずきどころ
実際につまずいた順に並べます。
詳しい対処と動くコードは後半にまとめました。
1. pochipp_data が取れない
普通に /wp-json/wp/v2/pochipps を叩いても、meta が空だったり、そもそも出てこなかったりします。
取り方にひとつ条件があります。
2. 部分更新はできない
pochipp_data はJSON文字列まるごとひとつのフィールドです。
「価格だけ更新」というつもりで価格だけ入れたJSONを送ると、それ以外の項目が全部消えます。
ASINも画像もリンクも消えて、商品が空になります。
「読む → 書き換える → 戻す」の順で扱います。
3. 価格を入れても表示されない
price に数字を入れただけでは、記事に価格は出ません。
表示を左右するフラグが別にあります。
しかもそのフラグ、名前から想像する挙動と少しずれています。
4. 楽天のリンクを入れても検索結果に飛ぶ
商品ページへの直リンクを入れたいのに、楽天ボタンが「楽天市場で”◯◯ 1巻”を検索した結果」に飛び続ける。
これはフィールド名の問題です。
候補を6つ試して、効くものは1つだけでした。
名前から予想できるものではありません。
なお、そこに入れるURLはアフィリエイトIDが付いていない生の商品URLです。
アフィリエイトIDはポチップが自分で付け直します。
付いたURLを渡すと二重になって壊れます。
5. 価格が「¥1」になる
Amazon APIから素直に価格を取ると、たまに1円になります。
中古の出品が「買い物かごに入る側」を取っているためです。
コミックスの1巻が¥1で表示されている、といった具合です。
これはポチップの問題ではありませんが、一括更新をやるなら踏むことになります。
6. 消してはいけないもの
cvKey と isCount はクリック計測に使われています。
ここを空にしたり作り直したりすると、それまでの計測が切れます。
更新のときは触らないのが正解です。
作業前に
必ずバックアップを取ってください。 カスタムフィールドを直接書き換える作業です。
ループを1回間違えれば全商品が壊れます。
絞り込むつもりのスクリプトを条件なしで走らせて、34件を上書きしたことがあります。
ログから戻せましたが、残していなければ手詰まりでした。
- 実行前にデータベースのバックアップを取る
- いきなり全件ではなく、1件で試して表示を確認してから回す
- 更新の前後をログに残す(戻せるように)
この3つは省かないでください。
ここから先(有料部分)
以下、実際に動くコードです。
Python + requests で書いていますが、やっていることは単純なHTTPリクエストなので、PHPでもJavaScriptでも同じことができます。
- 接続(アプリケーションパスワードでの認証)
- 全商品を読み出す
- 1件だけ安全に更新する
- 一括更新の骨組み(失敗しても止まらない・進捗が見える)
- 商品を新規登録して記事にブロックを差し込む
pochipp_dataのフィールド一覧(分かっているもの全部)- つまずきどころ1〜6の具体的な対処



