MENU

XserverでWordPress REST APIの「無効なパラメータ: status」が出たときの対処法

Xserver上でWordPress REST APIを使って記事投稿を自動化しようとした際、/wp/v2/posts へのPOSTリクエストに対して次のエラーが返ってきた。

WordPress API error 400 on /wp/v2/posts: 無効なパラメータ: status

メッセージだけ見ると「statusの値がおかしい」ように読める。しかし実際には、AuthorizationヘッダーがWordPress側に届いていないことが原因だった

この記事では、同じエラーに詰まったときの切り分け手順と、.htaccess で解決した方法をまとめる。


目次

この記事の要点

  • エラーメッセージは「statusが無効」でも、原因が認証ヘッダー未伝達の場合がある
  • XserverではAuthorizationヘッダーがPHPに渡らないことがある
  • .htaccessHTTP_AUTHORIZATION を引き継ぐ設定を追加すると解決するケースがある
  • 切り分けは「status値の確認」と「認証ヘッダーの確認」をセットで行う

発生したエラー

発生したエラーの全文は以下のとおり。

WordPress API error 400 on /wp/v2/posts: 無効なパラメータ: status

発生箇所は /wp/v2/posts(投稿作成エンドポイント)。HTTP 400 は「リクエストの内容に問題がある」という応答で、WordPress REST APIはどのパラメータが問題かをメッセージに含めてくれる。ここでは status が指摘されている。


まず確認すること:status値は正しいか

エラーメッセージの通り、まず status の値自体を疑うのが正しい順番だ。

WordPress REST APIの投稿作成で使える status の値は以下のとおり。

  • draft:下書き
  • publish:公開
  • future:予約投稿(date パラメータとセット)
  • pending:レビュー待ち
  • private:非公開

次のような誤りが混入しやすい。

  • 全角文字や日本語で値を渡している("下書き" など)
  • 余分なスペースが入っている("draft " など)
  • フィールド名を post_status にしている(REST APIでは status
  • 定義されていない独自ステータスを指定している

これらを確認してもエラーが解消しない場合、原因は別にある可能性が高い。


Xserver環境で起きた実際の原因

今回のケースでは、status値に問題はなかった。

原因は AuthorizationヘッダーがWordPress(PHP)まで届いていなかったことだったとみられる。XserverのサーバーやApacheの設定によって、HTTPリクエストに含まれるAuthorizationヘッダーがそのままPHPに渡らない場合がある。

WordPress REST APIはApplication Passwordによる認証を処理する際にこのAuthorizationヘッダーを参照する。ヘッダーが届いていない状態では認証が通らず、リクエストは未認証扱いになる。

なぜstatusエラーに見えるのか。 未認証のリクエストは、公開ステータス(publish など)の投稿を作れないなど、権限に基づくバリデーションが走る。その結果として status に関するエラーが返ってくる場合があるとみられる。つまり、「statusの値が悪い」というメッセージが出ていても、根本的な原因はAuthorizationヘッダーの問題という可能性がある。

ここがポイント:「無効なパラメータ: status」は常にstatus値の問題とは限らない。XserverなどでApplication Passwordを使う場合は、AuthorizationヘッダーがWordPressに届いているかをあわせて確認する。


解決方法:.htaccessに設定を追加する

.htaccess に以下の設定を追加することで解決した。

<IfModule mod_rewrite.c>
  RewriteEngine On
  RewriteCond %{HTTP:Authorization} .
  RewriteRule .* - [E=HTTP_AUTHORIZATION:%{HTTP:Authorization}]
</IfModule>

この設定は、ApacheがPHPにリクエストを渡す際に、HTTPのAuthorizationヘッダーを HTTP_AUTHORIZATION 環境変数としてセットするものだ。WordPressはこの環境変数を通じてAuthorizationヘッダーの内容を受け取る。

追加する場所

.htaccess ファイル内の # BEGIN WordPress よりに追加する。

<IfModule mod_rewrite.c>
  RewriteEngine On
  RewriteCond %{HTTP:Authorization} .
  RewriteRule .* - [E=HTTP_AUTHORIZATION:%{HTTP:Authorization}]
</IfModule>

# BEGIN WordPress
# ... WordPressの既存設定 ...
# END WordPress

WordPress側が管理するブロック(# BEGIN WordPress# END WordPress)の内部に書くと、WordPress更新時などに上書きされる可能性があるため、その前に置くのが基本だ。

編集前にバックアップを取ること。 .htaccess を誤って壊すとサイト全体がアクセス不能になる場合があるため、変更前に必ずバックアップを作成しておく。


確認手順

エラーが発生したときの切り分け手順を整理する。

1. status値を確認する

リクエストのペイロードを確認し、status フィールドの値が有効な値(draft / publish / future / pending / private)になっているかチェックする。

2. Application Password認証が通るか確認する

以下のエンドポイントにGETリクエストを送り、認証が正しく通るか確認する。

GET /wp-json/wp/v2/users/me
Authorization: Basic <base64エンコードしたユーザー名:Application Password>

レスポンスに自分のユーザー情報が返ってくれば認証は通っている。401 Unauthorized403 Forbidden が返る場合、認証ヘッダーが届いていない可能性が高い。

3. .htaccessの設定を確認・追加する

/wp-json/wp/v2/users/me で認証が通らない場合、.htaccess の設定を確認する。HTTP_AUTHORIZATION 引き継ぎ設定が追加されていなければ追加し、再度テストする。

4. statusをdraftに固定してテストする

設定追加後、まず status: draft で投稿作成リクエストを送って動作確認する。下書きであれば投稿権限のチェックが最小限になるため、認証が通ればほぼ成功する。

5. 本番のstatus設定に戻す

draft で成功したら、自動投稿スクリプトのstatus設定を本来の値(publish など)に戻して確認する。


まとめ:Xserverでは.htaccess設定も優先確認する

「無効なパラメータ: status」というエラーが出たとき、確認すべき点は2つある。

  • status値そのもの — 有効な値を送っているか
  • AuthorizationヘッダーがWordPressに届いているか/wp-json/wp/v2/users/me で認証確認

Xserver環境では後者が原因になるケースがある。.htaccessHTTP_AUTHORIZATION の引き継ぎ設定を追加することで解決するため、同じエラーに詰まったらstatus値と認証ヘッダーの両方をセットで確認するのが早い。

他のサーバー環境でも類似の問題は起きる可能性があるが、環境依存の挙動のため、Xserver以外での動作は個別に確認が必要だ。


参照リンク

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

コメント

コメントする

日本語が含まれない投稿は無視されますのでご注意ください。(スパム対策)

目次