【WORDPRESS】管理画面が別ドメインの時、apiエラーになるので管理ドメインを認識させる

WordPress

公開ドメインと管理画面ドメインを分けて運用している場合。
wordpressのバージョンを更新したら更新がapi利用になりドメインを認識させる必要があるようです

WordPress 5系から 6系/7系へのアップデートに伴い、エディタ(Gutenberg)の内部処理が「旧来のフォーム送信(POST)」から「REST API による非同期通信(JavaScript fetch)」へ全面的・不可逆的に移行・強化されたことが本質的な原因

wp-config.php/* 編集が必要なのはここまでです */ より前に以下を記述します。

// 現在アクセスしているドメイン(管理ドメイン)を標準のURLとしてWPに認識させる
if ( isset( $_SERVER['HTTP_HOST'] ) ) {
$is_ssl = ( isset( $_SERVER['HTTPS'] ) && $_SERVER['HTTPS'] === 'on' ) ||
( isset( $_SERVER['HTTP_X_FORWARDED_PROTO'] ) && $_SERVER['HTTP_X_FORWARDED_PROTO'] === 'https' );
$scheme = $is_ssl ? 'https://' : 'http://';

// WP_SITEURL(コア・APIのベース)をアクセス中のドメインに合わせる
define( 'WP_SITEURL', $scheme . $_SERVER['HTTP_HOST'] );
define( 'WP_HOME', $scheme . $_SERVER['HTTP_HOST'] );
}

// 管理ドメイン側でCookieを正しく保持させる
define( 'COOKIE_DOMAIN', false );

旧エディタや古い WP バージョンでは、管理画面のドメインと本体の URL が多少ズレていてもブラウザの通常のフォーム送信(HTTP POST)で強引に処理できていましたが、REST API 通信(fetch)に変わったことで以下の標準Web規格が厳密に適用されるようになりました。

  • CORS(Cross-Origin Resource Sharing)制約: JS が別ドメインの REST API へアクセスする際のブロック
  • Cookie / Nonce の 同一判定(SameSite): 別ドメインへの API リクエスト時に認証用 Cookie が添付されず 401/403 エラーになる現象

管理ドメインと公開ドメインを分けた運用ではよく遭遇する罠ですので、今後は wp-config.php やフィルターで REST API のエンドポイントを管理ドメイン側に紐付けておけば安定して運用できるようです。

お気軽にコメントください!

スパム対応のためコメント認証に数日かかることがありますが、お気軽にコメントいただけると嬉しいです^^

コメント

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