「アップロードしたファイルを wp-content/uploads/YYYY/MM へ移動できませんでした」エラー

メディア(メディアライブラリ、uploads/ に展開するプラグインのアップロード、またはそこへファイルを書き出すプラグインの有効化)をアップロードすると、WordPress が次のように表示します。

アップロードしたファイルを wp-content/uploads/2026/04 へ移動できませんでした。

エラーのパスは現在の年月に応じて変わります。画像・PDF など、uploads フォルダに保存されるあらゆるファイルで発生します。

なぜ WordPress はこのメッセージを表示するのか

WordPress は PHP の move_uploaded_file() を呼び出して、受信したファイルを wp-content/uploads/<YYYY>/<MM>/ に書き込もうとしました。ウェブサーバーユーザー(Apache/Nginx では www-data、一部の RHEL 系ホストでは apache、共用ホストではカスタム)がアップロードディレクトリに書き込み権限を持っていないため、移動に失敗しました。

より多いのは、パスの途中の親ディレクトリが root 所有で、ウェブサーバーユーザーが書き込めないために、そもそも月フォルダを作成できないケースです。

根本原因

可能性の高い順に以下のいずれかです。

  1. 親ディレクトリ wp-content/uploads/root 所有 — セットアップ手順の一部を root で実行してそのパスを mkdir した場合によくあります(手動の docker exec、デプロイスクリプト、root での unzip など)。その後の chown は特定のサブフォルダだけを触り、親を見落とすことが多いです。
  2. パーミッションが厳しすぎる750755 で、かつグループが一致しておらず、ウェブサーバーユーザーが書き込めない。
  3. 移行後の所有者のずれ — バックアップから root でファイルを復元し、その後 chown し忘れた。
  4. まれに: Unix パーミッション上は正常に見えるものの、SELinux または AppArmor が書き込みを拒否している。

解決方法

sudo が使えるシェル、または Docker コンテナ内で root として:

# WordPress ルートが別の場所にある場合はパスを調整してください
cd /var/www/html

# uploads ツリー全体の所有者をウェブサーバーユーザーに変更
chown -R www-data:www-data wp-content/uploads

# uploads をグループ書き込み可能に
chmod -R 775 wp-content/uploads

注意点:

  • www-data:www-data はご利用のホストの正しいユーザーに置き換えてください。以下で確認できます。
    ps aux | grep -E "apache|nginx|httpd" | head
    
    左端のユーザー列を見てください。
  • マネージドホスティングではシェルアクセスがない場合がほとんどです。*「wp-content/uploads/ の所有者をウェブサーバーユーザーにリセットしてください」*と記載したチケットを送ってください。ホスト側はこの問題を熟知しています。
  • chmod 777 は使わないでください。 動作はしますがセキュリティ上の悪手です。正しい解決策は「所有者を正しく設定した上での 775」です。

変更後、アップロードを再試行してください。サーバーを再起動する必要はありません。

この問題に該当するかの確認方法

シェルから uploads パスの所有者を確認します。

ls -ld wp-content/uploads wp-content/uploads/2026 wp-content/uploads/2026/04

いずれかに root root、またはウェブサーバーユーザー以外の所有者が表示されれば、それが原因です。修正後は全階層で www-data www-data(またはホストの該当ユーザー)となるはずです。

新規インストールで起きやすく、移行では起きにくい理由

WordPress の公式インストーラーは uploads/ を遅延作成します。ディレクトリ自体は存在しますが、年・月のサブディレクトリは初回アップロード時に作成されます。初回アップロード前にインストールまたはインストール後の手順を root で実行していると、親が root 所有となり、ウェブサーバーユーザーは子を書き込めなくなります。

正常稼働しているホストからの移行では正しい所有者情報が一緒に持ち込まれるため、新規インストールでこの問題が不釣り合いに発生します。

それでも解決しない場合

所有者が正しく見えるのにエラーが続く場合、原因は SELinux または AppArmor の可能性が高いです。ls -ld wp-content/uploads の出力とホスト種別を添えて support@wpproconverter.com までご連絡ください。