WordPressのページを、管理画面を開かずに更新する。REST APIとアプリケーションパスワードの使い方

ホームページ制作のイメージ(ノートパソコン)

ホームページの文章を直すとき、ふつうはWordPressの管理画面にログインして、ページを1枚ずつ開いて書き換えます。数か所なら問題ありませんが、電話番号が変わって10ページ以上を直す、サービスのページをまとめて作り替える、となると、同じ操作のくり返しで半日がかりになります。

WordPressには、管理画面を開かなくても、外からページや記事を読み書きできる「REST API(レスト・エーピーアイ)」という仕組みが最初から入っています。ワイズ企画では、ホームページの作り替えや、ブログの下書きの投稿にこの仕組みを使っています。この記事では、その使い方と、実際に使ってみて分かった注意点をまとめます。

目次

REST APIでできること

REST APIは、決まった形の「お願い」を送ると、WordPressが答えを返してくれる窓口のようなものです。たとえば、次のようなことができます。

  • 固定ページや投稿の一覧と、それぞれの本文を取り出す
  • ページの本文やタイトルを書き換える
  • 新しいページや記事を「下書き」として作る
  • メニューやカテゴリー、画像の説明文(代替テキスト)を直す

人が管理画面で1枚ずつ行う操作を、プログラムからまとめて行えるようになる、と考えると分かりやすいと思います。公開されているページの情報を読むだけなら、ログインなしでもできます(試しにブラウザで https://(サイトのURL)/wp-json/wp/v2/pages を開くと、ページの一覧が文字で表示されます)。書き換えには、次の「アプリケーションパスワード」が必要です。

1. アプリケーションパスワードを発行する

外から書き換えるときは、ふだんのログインパスワードではなく、アプリケーションパスワードという専用のパスワードを使います。WordPress 5.6から標準で使える機能です。

  • 管理画面の「ユーザー」→「プロフィール」を開く
  • いちばん下の「アプリケーションパスワード」の欄で、名前(何に使うかが分かる名前)を入れて「新しいアプリケーションパスワードを追加」を押す
  • 表示された24文字のパスワードを、その場で控える(画面を閉じると二度と表示されません)
アプリケーションパスワードの発行画面
「プロフィール」のいちばん下にある、アプリケーションパスワードの欄(パスワードは隠しています)

ふだんのパスワードと分けておく利点は、いつでも、これだけを取り消せることです。作業が終わったら同じ画面の「取り消す」を押せば、そのパスワードでは二度と書き換えられなくなります。ふだんのログインには影響しません。

2. 本文を取り出して、控えを取る

書き換える前に、必ず今のページの中身を取り出して保存しておきます。万一おかしな内容で上書きしても、控えがあればすぐに元へ戻せます。

Pythonで書くと、たとえば次のようになります(ユーザー名とアプリケーションパスワードは、プログラムに直接書かずに別のファイルから読み込むようにしています)。

import base64, json, urllib.request

SITE = "https://example.com/wp-json/wp/v2"
user, app_pass = open("wp_login.txt", encoding="utf-8").read().split()[:2]
auth = base64.b64encode(f"{user}:{app_pass}".encode()).decode()

def call(method, path, data=None):
    req = urllib.request.Request(
        SITE + path, method=method,
        headers={"Authorization": "Basic " + auth, "Content-Type": "application/json"},
        data=json.dumps(data).encode() if data else None)
    with urllib.request.urlopen(req) as res:
        return json.loads(res.read())

page = call("GET", "/pages/123?context=edit")        # ID 123 のページを取り出す
json.dump(page, open("page_123_backup.json", "w", encoding="utf-8"), ensure_ascii=False)

context=edit を付けると、ブロックの区切りを含んだ「編集画面と同じ形」の本文が取り出せます。書き換えるときは、この形のまま直します。

3. まず「下書き」として作り、画面で確認する

いきなり公開中のページを書き換えるのはおすすめしません。新しいページは下書きとして作り、管理画面のプレビューで見た目を確かめてから公開します。

new = call("POST", "/pages", {
    "title": "サービス紹介(確認用)",
    "content": "<!-- wp:paragraph --><p>本文</p><!-- /wp:paragraph -->",
    "status": "draft",
})
print(new["id"])   # 管理画面のプレビューで確認してから、"publish" にする

ワイズ企画では、作り替える11ページをすべて確認用の下書きで作り、1ページずつ見てもらってから公開しました。公開したあとで「やっぱり元に戻したい」となっても、手順2の控えがあれば戻せます。

固定ページの下書きの一覧
確認用のページは「下書き」で作り、プレビューで見てから公開する(ページ名はぼかしています)

つまずいたところ

実際に使ってみると、手順どおりでもうまくいかない場面がいくつかありました。

  • 「ログインしていません」と返ってくる:パスワードは合っているのに、サーバーがパスワードの情報をWordPressに渡していないことがあります。レンタルサーバーの設定ファイルに数行足すと直ります(別の記事で詳しく書きます)。
  • 「403」で止められる:レンタルサーバーの不正アクセス対策(WAF)が、ページに入れる見た目の指定などを攻撃と見なして止めることがあります。文章だけの更新は通っても、画像のアップロードは止まる、ということもあります。
  • セキュリティのプラグインがアプリケーションパスワードを止めている:プラグインによっては、初期設定でこの機能を無効にしています。設定を見直すと使えるようになります。

どれも「パスワードが間違っている」わけではないので、原因が分かるまで少し悩みました。返ってきた答えの番号(401、403など)と文言を手がかりに、ひとつずつ切り分けるのが近道です。

安全に使うために

アプリケーションパスワードは、そのユーザーと同じことが何でもできる鍵です。便利な分、扱いには気をつけています。

  • 通信は必ずhttpsのサイトで使う
  • パスワードはファイルに保存して読み込み、プログラムやメール、チャットに直接書かない
  • 用途ごとに名前を付けて発行し、使わなくなったら取り消す
  • 可能なら、作業専用のユーザーを作り、必要な権限だけを持たせる
  • 書き換える前に控えを取り、新しい内容は下書きで確認してから公開する

こんなときに役立ちます

「同じ変更をたくさんのページに入れたい」「文章の作成は別の場所で行い、WordPressには流し込むだけにしたい」「定期的に決まった形の記事を下書きで用意したい」。こうした作業は、REST APIを使うと人の手間が大きく減ります。

ワイズ企画では、ホームページの制作・保守のなかで、こうした仕組みづくりもお手伝いしています。「今のサイトの更新に時間がかかっている」というご相談も、お気軽にどうぞ。

ホームページ制作・多言語化について / AI活用支援について / お問い合わせ

よかったらシェアしてね!
  • URLをコピーしました!
  • URLをコピーしました!

この記事を書いた人

ワイズ企画代表。インドネシアで15年以上の国際ビジネス経験。愛知県豊橋市を拠点に、中小企業のAI活用・ホームページ制作・業務の自動化を支援しています。このブログでは、日々の仕事で実際に使ったAIとWordPressのやり方を記録しています。

目次