WordPress REST APIで記事を投稿する方法|アプリケーションパスワードの設定から、画像・予約投稿・エラー対処まで
公開日: / カテゴリ: WordPress入稿 / 執筆: エラバレル

「WordPressへの投稿を、プログラムから自動でできないか」「REST APIを使えばいいと聞いたけれど、認証の設定でつまずいた」。記事の入稿を効率化したい方や、社内の仕組みとWordPressをつなぎたいエンジニアの方から、こうした相談をよくいただきます。
先に結論をお伝えします。**WordPress 5.6以降なら、標準の「アプリケーションパスワード」を発行して、/wp-json/wp/v2/posts に送るだけで記事を投稿できます。** プラグインを追加する必要はありません。ログイン用のパスワードを外部に渡さずに済むのも利点です。
一方で、実際にやってみると「401エラーで認証が通らない」「投稿はできたが、ブロックエディタで開くと1つのクラシックブロックになっている」「画像が入らない」といった壁にぶつかりがちです。この記事では、そうした落とし穴も含めて、REST APIで記事を投稿するまでの手順を順番に説明します。
この記事でわかること
- WordPress REST APIとは何か、何ができるのか
- アプリケーションパスワードの発行手順
- curlとPythonで記事を投稿するサンプル
- 画像のアップロード、アイキャッチ、カテゴリ、予約投稿の指定方法
- 投稿した記事がブロックにならない理由と対処
- 401・403・404エラーの原因と直し方
WordPress REST APIとは?
WordPress REST APIは、WordPressの記事・固定ページ・画像・カテゴリなどを、決まった形式のURLとデータ(JSON)で読み書きできる仕組みです。WordPress 4.7から本体に組み込まれており、今のWordPressなら最初から使えます。
ふだん管理画面で行っている「投稿を追加」「メディアをアップロード」といった操作を、プログラムから行えるようになります。たとえば、次のような使い方ができます。
- 社内の原稿管理の仕組みから、WordPressに下書きを自動で作る
- 決まった時間に、まとめて予約投稿を登録する
- 複数のWordPressサイトに、同じ形式で記事を入れる
- 別の場所で管理している商品情報を、記事として反映する
| 操作 | 送り先(エンドポイント) | 方法 |
|---|---|---|
| 記事の一覧を読む | /wp-json/wp/v2/posts | GET |
| 記事を作る | /wp-json/wp/v2/posts | POST |
| 記事を書き換える | /wp-json/wp/v2/posts/記事のID | POST |
| 画像をアップロードする | /wp-json/wp/v2/media | POST |
| カテゴリの一覧を読む | /wp-json/wp/v2/categories | GET |
| タグを作る | /wp-json/wp/v2/tags | POST |
記事を読むだけなら認証はいりませんが、記事を作る・書き換えるには認証が必要です。その認証に使うのが、次に説明するアプリケーションパスワードです。
「エンドポイント」とは
APIで、データを送ったり受け取ったりする先のURLのことです。WordPressでは、サイトのURLの後ろに /wp-json/wp/v2/ を付けた形になります。たとえば https://example.com/wp-json/wp/v2/posts が、記事のエンドポイントです。
WordPressを使っているサイトの割合
- 選ばれるAI診断が診断した22業種・2,296件の公式サイトのうち、WordPressで作られていたのは1,134件(49%)
- 小さな会社やお店のホームページでも、およそ2件に1件がWordPressでした
- REST APIは、これらのサイトで標準で使える仕組みです
アプリケーションパスワードを発行する
アプリケーションパスワードは、WordPress 5.6で追加された標準機能です。ログイン用のパスワードとは別に、外部のツールやプログラム専用のパスワードを発行できます。 用途ごとに発行でき、不要になったら個別に取り消せます。
発行の手順
- WordPressの管理画面にログインする
- 左のメニューの「ユーザー」から「プロフィール」を開く(管理者が別のユーザー用に作る場合は「ユーザー」→「ユーザー一覧」から対象のユーザーを開く)
- 画面の下のほうにある「アプリケーションパスワード」の欄を探す
- 「新しいアプリケーションパスワード名」に、用途が分かる名前(例:「記事の自動投稿」)を入れる
- 「新しいアプリケーションパスワードを追加」を押す
- 表示された24文字のパスワードを、その場で控える
パスワードは一度しか表示されない
発行したアプリケーションパスワードは、画面を閉じると二度と表示されません。控え忘れたら、取り消して作り直してください。表示されるパスワードには4文字ごとに空白が入っていますが、空白は入れても入れなくても使えます。
投稿に使うユーザーの権限に注意
REST APIでできることは、そのユーザーの権限と同じです。「投稿者」なら自分の記事を公開できますが、「寄稿者」は公開できず、下書きの保存までです。カテゴリを新しく作るには「編集者」以上の権限が必要です。自動投稿用に、必要な権限だけを持つユーザーを別に作っておくと安全です。
アプリケーションパスワードの欄が見当たらないとき
- サイトがHTTPSになっていない:アプリケーションパスワードは、原則としてHTTPS(鍵マーク)のサイトでしか使えません
- セキュリティのプラグインが止めている:REST APIやアプリケーションパスワードを無効にする設定が入っていないか確認する
- WordPressが5.6より古い:本体を更新する
詳しい確認の順番は、アプリケーションパスワードとは?の記事で説明しています。
curlで記事を投稿してみる
まずは、コマンドで動作を確かめるのが早道です。curlは、WindowsやMacに入っている、URLにデータを送るためのコマンドです。
curl -X POST "https://example.com/wp-json/wp/v2/posts" \
-u "ユーザー名:xxxx xxxx xxxx xxxx xxxx xxxx" \
-H "Content-Type: application/json" \
-d '{"title":"テストの記事","content":"<p>本文です。</p>","status":"draft"}'
-uの後ろに「ユーザー名:アプリケーションパスワード」を書く(Basic認証)statusをdraftにすると下書き、publishにすると公開になる- 成功すると、作られた記事の情報(id や link など)がJSONで返ってくる
管理画面の「投稿」→「投稿一覧」を開き、下書きが増えていれば成功です。
まずは必ず「下書き」で試す
テストのつもりで publish を指定すると、そのまま公開され、RSSやSNSの自動共有が動くこともあります。動作の確認は、必ず status を draft にして行ってください。
Pythonで記事を投稿する
決まった作業を繰り返すなら、プログラムにしておくと便利です。Pythonの requests というライブラリを使った例です。
import requests
site = "https://example.com"
auth = ("ユーザー名", "xxxx xxxx xxxx xxxx xxxx xxxx")
data = {
"title": "テストの記事",
"content": "<p>本文です。</p>",
"status": "draft",
"slug": "test-post",
"categories": [3],
"tags": [5, 8],
"excerpt": "記事の抜粋です。",
}
r = requests.post(f"{site}/wp-json/wp/v2/posts", auth=auth, json=data, timeout=30)
r.raise_for_status()
print(r.json()["id"], r.json()["link"])
よく使う項目
| 項目 | 内容 | 書き方の例 |
|---|---|---|
| title | 記事の題名 | "WordPressの使い方" |
| content | 本文(HTML) | "<p>本文</p>" |
| status | 状態 | draft(下書き)、publish(公開)、future(予約)、pending(レビュー待ち)、private(非公開) |
| date | 公開日時(サイトの時間帯) | "2026-10-20T09:00:00" |
| slug | URLの末尾 | "wordpress-tsukaikata" |
| categories | カテゴリのID(数字の配列) | [3] |
| tags | タグのID(数字の配列) | [5, 8] |
| featured_media | アイキャッチ画像のID | 123 |
| excerpt | 抜粋 | "記事の要約です。" |
カテゴリとタグは、名前ではなくID(数字)で指定します。IDは、/wp-json/wp/v2/categories を開くと一覧で確認できます。ない名前のタグを使いたいときは、先に /wp-json/wp/v2/tags にPOSTして作り、返ってきたIDを使います。
予約投稿にするには
status を future にして、date に未来の日時を入れます。date はサイトの設定(「設定」→「一般」のタイムゾーン)の時間で解釈されます。日本時間で決めたいときは、タイムゾーンが「東京」になっているかを確かめてください。過去の日時を入れると、予約ではなくすぐに公開されることがあるので注意が必要です。まとめて予約するときの考え方は、WordPressで記事をまとめて予約投稿する方法の記事で説明しています。
画像をアップロードして、アイキャッチにする
本文の中の画像やアイキャッチを使うには、先に画像をメディアライブラリにアップロードし、返ってきたIDやURLを使います。
with open("photo.jpg", "rb") as f:
r = requests.post(
f"{site}/wp-json/wp/v2/media",
auth=auth,
headers={
"Content-Disposition": 'attachment; filename="photo.jpg"',
"Content-Type": "image/jpeg",
},
data=f.read(),
timeout=60,
)
media = r.json()
print(media["id"], media["source_url"])
- アイキャッチにするなら、記事を作るときに
"featured_media": media["id"]を指定する - 本文に入れるなら、
media["source_url"]を使って<img>を書く - 代替テキスト(画像の説明)は、
/wp-json/wp/v2/media/画像のIDにalt_textを送って設定できる
ほかのサイトの画像のURLを、本文にそのまま書くこともできますが、元のサイトで画像が消えると表示されなくなります。自分のメディアライブラリにアップロードしてから使うのが確実です。
投稿した記事が「ブロック」にならない問題
REST APIで投稿した記事を、ブロックエディタ(Gutenberg)で開くと、本文全体が1つの「クラシック」ブロックにまとまっていることがあります。これは不具合ではなく、送った本文がふつうのHTMLだったためです。
ブロックエディタの記事は、HTMLの間に「ここからここまでが段落ブロック」という目印のコメントが入った形で保存されています。
<!-- wp:heading -->
<h2 class="wp-block-heading">見出し</h2>
<!-- /wp:heading -->
<!-- wp:paragraph -->
<p>本文です。</p>
<!-- /wp:paragraph -->
この目印付きの形で送れば、最初からブロックに分かれた記事になります。目印のないHTMLを送った場合は、エディタで開いてから「ブロックへ変換」を選ぶと、ブロックに分けられます。
| 送り方 | エディタでの見え方 | 手間 |
|---|---|---|
| ふつうのHTML | 1つのクラシックブロック | 開くたびに変換が必要 |
| ブロックの目印付きのHTML | 見出し・段落・表などのブロックに分かれる | 送る側で目印を付ける処理が必要 |
見出し・段落・リスト程度なら目印を付けるのは難しくありませんが、表、画像、テーマ独自の吹き出しやボックスまで正しく変換しようとすると、処理がかなり複雑になります。
〇〇工務店の施工事例の自動投稿
やりたいこと:社内のスプレッドシートにある施工事例(題名・地域・工期・写真)を、毎週まとめて下書きにする。
やり方:①写真を /media にアップロードしてIDを受け取る ②本文を、見出し・段落・画像のブロックの目印付きHTMLで組み立てる ③status を draft にして /posts に送る ④担当者が下書きを確認してから公開する。
注意:公開まで自動にせず、人が確認する段階を残す。
401・403・404エラーの原因と直し方
REST APIでつまずきやすいのは、認証まわりのエラーです。主な原因と直し方をまとめます。
| エラー | よくある原因 | 直し方 |
|---|---|---|
| 401 rest_not_logged_in | 認証の情報(Authorizationヘッダー)がサーバーの途中で消えている | サーバーの設定(.htaccess)で、Authorizationヘッダーを渡すようにする。サーバー会社のヘルプを確認する |
| 401 incorrect_password | アプリケーションパスワードが違う、またはログインパスワードを使っている | 発行したアプリケーションパスワードを使う。取り消していないか確認する |
| 403 rest_cannot_create | ユーザーの権限が足りない | 投稿者・編集者などの権限を持つユーザーで認証する |
| 403(WordPressのエラーではない画面) | セキュリティのプラグインやサーバーのWAF(不正な通信を止める機能)が止めている | プラグインのREST APIの制限を確認する。WAFの記録を確認し、除外を設定する |
| 404 rest_no_route | パーマリンクの設定が「基本」で、/wp-json/ が使えない | 「設定」→「パーマリンク」で「投稿名」などにする。または ?rest_route=/wp/v2/posts の形で送る |
認証が通らないときのチェックリスト
- ログイン用ではなく、アプリケーションパスワードを使っている
- ユーザー名は、表示名ではなくログイン用のユーザー名になっている
- URLが https で始まっている
- ブラウザで
/wp-json/を開くと、JSONが表示される - セキュリティのプラグインで、REST APIを止めていない
- そのユーザーに、記事を作る権限がある
プログラムを書かずに自動化したい人へ
ここまでの手順で、REST APIの投稿はひととおりできます。ただ、実際の入稿で手間がかかるのは、原稿を、WordPressのブロックの形に組み立てる部分です。見出し・太字・リンク・表・画像を正しく変換し、画像をメディアライブラリにアップロードし、カテゴリやアイキャッチを指定する。これを自分で作り込むのは、意外と大変です。
原稿をGoogleドキュメントで書いているなら、ドクポスのように、REST APIとアプリケーションパスワードを使って入稿までを行うウェブサービスを使う方法もあります。ドクポスは、GoogleドキュメントのURLを貼ると、見出し・太字・リンク・箇条書き・表・画像・蛍光ペンをWordPressのブロックに変換して、下書き・予約・公開のいずれかで記事を作ります。画像はメディアライブラリにアップロードした状態で入り、ドキュメントの先頭に「カテゴリ:」「スラッグ:」「公開日:」などを書いておけば、記事の設定にも反映されます。WordPressのログインパスワードは渡さず、アプリケーションパスワードで接続します。
仕組みを理解したうえで「自分で作るか、既存のサービスを使うか」を選べるのが、REST APIを知っておくいちばんの利点です。Googleドキュメントからの入稿方法の比較は、GoogleドキュメントをWordPressの記事に変換する方法の記事でまとめています。
自動投稿で気をつけること
自動化すると、間違った内容も一気に公開されてしまいます。最初は下書きで登録し、人が確認してから公開する流れにしてください。また、アプリケーションパスワードは、ログインパスワードと同じくらい大事な情報です。プログラムの中に直接書いて共有したり、公開の場所に置いたりしないでください。
よくある質問
REST APIを使うのに、プラグインは必要ですか?
記事の投稿だけなら必要ありません。REST APIはWordPress 4.7から、アプリケーションパスワードは5.6から、本体の標準機能です。SEOプラグインの入力欄(メタディスクリプションなど)に書き込みたい場合は、そのプラグインがREST APIに対応しているかを確認する必要があります。
ログイン用のパスワードで認証してはいけないのですか?
標準の仕組みでは、REST APIのBasic認証にログイン用のパスワードは使えません。アプリケーションパスワードを使います。用途ごとに発行・取り消しができるので、ログイン用のパスワードを外部に渡すより安全です。
記事を書き換えるにはどうすればいいですか?
/wp-json/wp/v2/posts/記事のID に、変えたい項目だけを送ります。たとえば題名だけ変えるなら、{"title":"新しい題名"} を送ります。記事のIDは、投稿したときに返ってきた id か、管理画面の編集画面のURLで確認できます。
固定ページも投稿できますか?
できます。送り先を /wp-json/wp/v2/pages にします。項目は記事とほぼ同じですが、カテゴリとタグはありません。
1回にたくさんの記事を送っても大丈夫ですか?
短い時間に大量に送ると、サーバーの負荷が上がったり、WAFに不正な通信と判断されたりすることがあります。1件ずつ間を空けて送り、エラーが出たら止まるようにしておくと安全です。まとめて入れる方法の比較はWordPressに記事をまとめて投稿する方法の記事にまとめています。
アプリケーションパスワードが漏れたらどうすればいいですか?
「ユーザー」→「プロフィール」のアプリケーションパスワードの欄で、そのパスワードを取り消してください。取り消せば、すぐに使えなくなります。ログイン用のパスワードは影響を受けません。
まとめ
WordPress REST APIで記事を投稿する方法をまとめます。
この記事のまとめ
- REST APIは、記事・画像・カテゴリなどをURLとJSONで読み書きできる、WordPressの標準の仕組み
- 投稿の認証には、WordPress 5.6以降の標準機能「アプリケーションパスワード」を使う
- /wp-json/wp/v2/posts にPOSTすれば記事ができる。動作確認は必ず下書き(draft)で
- 画像は先に /media にアップロードし、返ってきたIDをアイキャッチに使う
- ふつうのHTMLを送ると1つのクラシックブロックになる。ブロックにするには目印付きのHTMLで送る
- 401は認証の情報が届いていない、403は権限やセキュリティの設定、404はパーマリンクの設定を疑う
プログラムを書かずに、GoogleドキュメントからWordPressへの入稿を自動にしたい場合は、ドクポスを試してみてください。5記事まで、カード登録なしで試せます。
ドクポスを無料で試す参考にした資料
- REST API Handbook(WordPress Developer Resources)
- Posts(REST API Reference、WordPress Developer Resources)
- Application Passwords Integration Guide(Make WordPress Core)
調査の方法:WordPressの利用割合は、2026年10月に選ばれるAI診断(2026年10月2日に見直した採点基準)で、22業種の公式サイト2,296件を診断したときの判定です。個別のサイト名は公開していません。