WordPressをマルチサイト化(サブディレクトリ型・サブドメイン型)している環境で、外部からREST APIを使って記事の投稿や取得を行う際、「子サイトごとにアプリケーションパスワードを別途発行する必要があるのか?」という疑問について解説します。
結論
サイト(子サイト)ごとにアプリケーションパスワードを個別発行する必要はありません。
同じユーザー(管理者アカウントなど)で操作する場合、メインサイトまたはネットワーク管理画面で発行した1つのアプリケーションパスワードを使い回すことができます。 変更する必要があるのはリクエストを送るURL(エンドポイント)のみです。
なぜ1つのアプリケーションパスワードで動作するのか?
WordPressマルチサイト構成では、ユーザー情報および認証データ(アプリケーションパスワード含む)は、ネットワーク全体で共通のデータベーステーブル(wp_users および wp_usermeta)に保持されます。
-
単一サイト: サイトごとにユーザーテーブルを持つ
-
マルチサイト: ネットワーク全体で1つのユーザーテーブルを共有する
そのため、どのサイトの管理画面からアプリケーションパスワードを発行しても、それは「ユーザー自身」に紐づく認証情報となり、ネットワーク内のすべてのサイトで有効になります。
REST APIのリクエスト方法(エンドポイントの切り替え)
Basic認証ヘッダー(Authorization: Basic <Base64(ユーザー名:アプリパスワード)>)は共通のまま、対象サイトのURLに合わせてエンドポイントを書き換えます。
1. メインサイトの操作
GET https://yokubch.site/wp-json/wp/v2/posts
2. 子サイト(サブディレクトリ型)の操作
GET https://yokubch.site/subsite/wp-json/wp/v2/posts
cURLでの実行例
メインサイトへの投稿取得:
curl -X GET "https://yokubch.site/wp-json/wp/v2/posts" \
-H "Authorization: Basic YOUR_BASE64_ENCODED_CREDENTIALS"
子サイトへの投稿取得:
curl -X GET "https://yokubch.site/subsite/wp-json/wp/v2/posts" \
-H "Authorization: Basic YOUR_BASE64_ENCODED_CREDENTIALS"
マルチサイト×REST APIでハマりやすい注意点
アプリパスワードが共通でもAPI認証や操作でエラー(401 / 403 / 404)が発生する場合は、以下のポイントを確認してください。
1. ユーザーが子サイトに「所属」しているか
ネットワーク管理者であっても、対象の子サイトの「ユーザー」一覧に追加されていない場合、権限不足(403 Forbidden)エラーになることがあります。
-
対処法:
-
ネットワーク管理画面 > 「サイト」 > 対象サイトの「編集」を開く。
-
「ユーザー」タブを開き、該当ユーザーを「管理者」ロールとして追加する。
-
2. サーバー側で Authorization ヘッダーがカットされている
シンレンタルサーバーやXserverなどのNginxリバースプロキシ環境では、セキュリティ対策等により Authorization ヘッダーがPHPに伝わらず、認証失敗(401 Unauthorized)になることがあります。
-
対処法 (
.htaccessに追記):.htaccessのRewriteEngine On直下に以下の記述が含まれているか確認します。コード スニペットRewriteEngine On RewriteRule .* - [E=HTTP_AUTHORIZATION:%{HTTP:Authorization}]
3. 子サイトのリライトルールが未適用
.htaccess が単一サイト用のままだと、/subsite/wp-json/... へのアクセスがルーティングできず 404 Not Found になります。マルチサイト用のルーティングルールが適用されているか確認してください。
まとめ
-
アプリケーションパスワードは「ユーザー単位」で共通(子サイトごとの再発行は不要)。
-
操作対象のサイト切り替えは「URL(エンドポイント)」を変更するだけ。
-
動かない時は「子サイトへのユーザー追加」と「Authorizationヘッダーの転送設定」を確認。


コメント