WordPressに記事を自動で投稿する仕組みを作ろうとすると、たいてい最初にここでつまずきます。同じ「WordPress」でも、外から記事を入れる口の住所が2種類あります。片方の住所を叩いて「404 見つかりません」と返ってきても、それは「口が無い」という意味ではありません。
結論を先に書きます。自分でサーバーに入れたWordPressの口は サイトのURL/wp-json/wp/v2。WordPress.comのサイトの口は https://public-api.wordpress.com/wp/v2/sites/サイトID。住所と鍵の形が違うだけで、その先の使い方はほぼ同じです。私は前者だけを試して「WordPress.comには自動投稿できない」と判断し、実際には動いていた仕組みを自分の手で壊しました。
私は清掃業を経営していて、プログラマーではありません。この判断ミスは2026年8月26日に自分でやったことなので、その記録として書きます。作る前の3秒の確認で防げた失敗です。
作り始める前に、口が開いているか3秒で確かめる
コードを1行も書く前に、ターミナルで次を実行してください。自分のサイトのURL の部分だけ書き換えます。
curl -s -o /dev/null -w '%{http_code}\n' https://自分のサイトのURL/wp-json/wp/v2/posts
返ってくるのは3桁の数字だけです。意味は次のとおりです。
| 返ってきた数字 | 意味 | 次にやること |
|---|---|---|
200 |
この住所に口がある。公開記事の一覧が読める状態 | そのまま進めてよい。書き込みには鍵が要る |
401 / 403 |
口はあるが、読むだけでも鍵を求められている | サーバー側の設定かセキュリティ系プラグインを確認 |
404 |
この住所には口が無い | ここで諦めない。下の「別の住所」を試す |
000 |
そもそもつながっていない | URLの打ち間違い、httpsの付け忘れを疑う |
大事なのは、200 が返るなら鍵を作る前から確認できるということです。うちの投稿ツールも、ログイン情報がまだ無いときは鍵なしでこの一覧を読みにいく作りにしてあります。読むだけなら鍵は要りません。鍵が要るのは書き込むときだけです。
自前WordPressの口は、毎朝ここを通っている
このサイト(事務自動化ラボ)はレンタルサーバーに自分でWordPressを入れたものです。記事の投稿は毎朝7時に自動で走っていて、通り道は サイトのURL + /wp-json/wp/v2 の1本だけです。
鍵は、WordPressの管理画面で作る「アプリケーションパスワード」です。管理画面の ユーザー → プロフィール をいちばん下まで下げると欄があります。作ると xxxx xxxx xxxx xxxx xxxx xxxx という空白入りの24文字が出ます。この画面を閉じると二度と見られません。その場で控えてください。
あとは「ユーザー名:アプリケーションパスワード」をつないで送るだけです。通信の中身としてはこうなります。
Authorization: Basic (ユーザー名:パスワード を変換した文字列)
この形で /posts に送れば記事が作られ、/categories でカテゴリーを探し、/media で画像を上げます。うちの投稿記録には、この道を通って作られた記事が日付つきで並んでいます。自前WordPressなら、ここまでは素直に動きます。
私の失敗:404を見て「できない」と決めつけた
問題は、別に運営している旅行サイトのほうでした。こちらは自前サーバーではなく、WordPress.comの無料サイトとして立てていました。
同じ要領で サイトのURL/wp-json/... を叩いたところ、何度試しても404。私はここで「WordPress.comの無料プランは、外から記事を入れる口が閉じている。だから自動投稿はできない」と結論を出しました。
そして、そこにあった投稿スクリプトを「動かないコード」だと思い込み、自前WordPress用の書き方(アプリケーションパスワード方式)に書き換えてしまいました。
この判断が間違いでした。そのスクリプトは元々ちゃんと動いていました。あとで確かめたら、下書きがすでに4本サイトに入っていました。動いていたものを、動かない形に自分で書き換えたわけです。
404が返ってきたこと自体は事実でした。間違っていたのは「404 = 口が無い」という読み方のほうです。404は「この住所には無い」としか言っていません。「どこにも無い」とは言っていません。
ついでに書いておくと、このとき私が書き換えたのは、別のAIに任せている領域のファイルでした。指示文で「触るな」と書いていても、権限が残っていれば触れてしまいます。禁止は文章ではなく権限で行う――これは同じ日に学んだ、別の教訓です。
口は、別の住所に開いていた
WordPress.comのサイトにも、外から記事を入れる口はあります。ただし自分のサイトのURLの下ではなく、WordPress.comの共通の窓口に置かれています。
https://public-api.wordpress.com/wp/v2/sites/サイトID
鍵の形も違います。アプリケーションパスワードではなく、トークン(合鍵の文字列)を1本渡します。
Authorization: Bearer (トークン)
並べるとこうなります。
| 自前WordPress | WordPress.com | |
|---|---|---|
| 口の住所 | サイトURL/wp-json/wp/v2 |
public-api.wordpress.com/wp/v2/sites/サイトID |
| 鍵 | アプリケーションパスワード | トークン |
| 送り方 | Authorization: Basic ... |
Authorization: Bearer ... |
| 記事を作る | /posts に送る(同じ) |
|
| カテゴリーを探す | /categories(同じ) |
|
| 画像を上げる | /media(同じ) |
|
| 二重投稿を防ぐ | /posts?slug=URL名&status=any で先に探す(同じ) |
|
つまり違うのは最初の住所と、鍵を渡す1行だけです。実際、うちの2本の投稿スクリプトを見比べても、差があるのは通信部分の数行で、記事を組み立てる部分はほとんど同じ形になっています。「WordPress.com用に全部作り直し」にはなりません。
トークンは、他人に渡ったら記事を書き放題にされる文字列です。スクリプトの中に直接書かないでください。うちではMacの標準の保管庫(キーチェーン)に入れて、実行時に読み出しています。
security add-generic-password -U -s 好きな名前 -a 好きな利用者名 -w 'ここにトークン'
読み出しはこの1行です。
/usr/bin/security find-generic-password -w -s 好きな名前
判明したあとの選択肢は3つ
| 選択肢 | できること | 向いている人 |
|---|---|---|
| A. WordPress.comのまま、共通の窓口から投稿する | 自動投稿できる。サーバーの管理が要らない | サーバーを持っていない・増やしたくない人 |
| B. 自分のサーバーにWordPressを入れる | wp-json がそのまま使える。プラグインも自由 |
すでにレンタルサーバーを契約している人 |
| C. 自動投稿をやめて、管理画面に貼り付ける | 仕組みが要らない | 週1〜2本で、当面増やす予定が無い人 |
私は一度Bの引っ越し手順まで書きました。ですが最終的に選んだのはAです。ただし、その理由はAPIではありませんでした。WordPress.comの無料サイトはURLが ◯◯.wordpress.com になり、広告主の提携審査で不利になるためです。独自ドメインを使いたくて有料プランに上げた、というだけの話でした。
ここも正直に書いておきます。私は当初「無料プランはアフィリエイトが規約違反だから引っ越すしかない」とも書き残していました。これも後から自分で訂正しています。禁止されているのは中身がリンクだけのようなサイトで、それは有料プランでも同じでした。
規約と料金は変わります。他人のまとめではなく、契約する時点の公式ページを自分で読んでください。私は自分のメモを2回とも間違えました。金額についても、私が確認したのは2026年8月26日時点の話なので、そのまま当てにしないでください。
明日やるなら、この順番で
- いま持っているサイトのURLで、いちばん上の
curlを1回実行する 200が返ったら、その住所で進めてよい。アプリケーションパスワードを作る404が返って、そのサイトがWordPress.comなら、共通の窓口とトークンの方式を調べる- まだサイトを作っていないなら、先にこの確認をしてからサイトを作る
- 鍵は必ずキーチェーンに入れる。スクリプトにもメモ帳にも書かない
- 最初は必ず下書きで送る。いきなり公開しない
4番がいちばん効きます。私は先にサイトを作ってから確認したので、あとから引っ越しを検討する羽目になりました。口があるかどうかは、記事を1本も書いていない段階で分かります。
まとめ
- WordPressには外から記事を入れる口が2種類ある。自前は
サイトURL/wp-json/wp/v2、WordPress.comはpublic-api.wordpress.com/wp/v2/sites/サイトID - 違うのは住所と鍵の渡し方だけ。
/posts/categories/mediaの使い方は同じで、作り直しにはならない 404は「この住所には無い」であって「どこにも無い」ではない。私はここを読み違えて、動いていた仕組みを壊した- 確認は
curl1行で終わる。サイトを作る前にやる - 鍵はキーチェーンへ。スクリプトに直接書かない
- プランの規約と料金は自分で公式ページを読む。私は自分のメモを2回間違えた
この失敗は、突き詰めると「1回の応答だけを見て結論を出した」ことが原因です。同じ形の失敗を他にもやっているので、AIに任せて失敗したこと5つ|実際に起きたことと再発防止にまとめてあります。判断を任せる前に読んでおくと、同じ穴を1つ減らせます。


コメント