PR

【WordPress】マルチサイト環境でREST APIを使う際、子サイトごとにアプリケーションパスワードは必要?

IT・WEB

WordPressをマルチサイト化(サブディレクトリ型・サブドメイン型)している環境で、外部からREST APIを使って記事の投稿や取得を行う際、「子サイトごとにアプリケーションパスワードを別途発行する必要があるのか?」という疑問について解説します。

結論

サイト(子サイト)ごとにアプリケーションパスワードを個別発行する必要はありません。

同じユーザー(管理者アカウントなど)で操作する場合、メインサイトまたはネットワーク管理画面で発行した1つのアプリケーションパスワードを使い回すことができます。 変更する必要があるのはリクエストを送るURL(エンドポイント)のみです。

なぜ1つのアプリケーションパスワードで動作するのか?

WordPressマルチサイト構成では、ユーザー情報および認証データ(アプリケーションパスワード含む)は、ネットワーク全体で共通のデータベーステーブル(wp_users および wp_usermeta)に保持されます。

  • 単一サイト: サイトごとにユーザーテーブルを持つ

  • マルチサイト: ネットワーク全体で1つのユーザーテーブルを共有する

そのため、どのサイトの管理画面からアプリケーションパスワードを発行しても、それは「ユーザー自身」に紐づく認証情報となり、ネットワーク内のすべてのサイトで有効になります。

REST APIのリクエスト方法(エンドポイントの切り替え)

Basic認証ヘッダー(Authorization: Basic <Base64(ユーザー名:アプリパスワード)>)は共通のまま、対象サイトのURLに合わせてエンドポイントを書き換えます。

1. メインサイトの操作

HTTP

GET https://yokubch.site/wp-json/wp/v2/posts

2. 子サイト(サブディレクトリ型)の操作

HTTP

GET https://yokubch.site/subsite/wp-json/wp/v2/posts

cURLでの実行例

メインサイトへの投稿取得:

Bash

curl -X GET "https://yokubch.site/wp-json/wp/v2/posts" \
  -H "Authorization: Basic YOUR_BASE64_ENCODED_CREDENTIALS"

子サイトへの投稿取得:

Bash

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)エラーになることがあります。

  • 対処法:

    1. ネットワーク管理画面 > 「サイト」 > 対象サイトの「編集」を開く。

    2. 「ユーザー」タブを開き、該当ユーザーを「管理者」ロールとして追加する。

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ヘッダーの転送設定」を確認。

コメント

タイトルとURLをコピーしました