トラブルシューティング for WordPress

エラー対処と人気プラグイン・テーマ解説

WordPressで画像がアップロードできない!原因と解決方法まとめ

WordPressで画像がアップロードできない!原因と解決方法まとめのアイキャッチ画像

はじめに

WordPressのメディアライブラリに画像をアップロードしようとしたら、こんなメッセージが出て止まった経験はありませんか?

  • 「HTTPエラー」
  • 「申し訳ありませんが、このファイルタイプはセキュリティ上の理由からアップロードできません。」
  • アップロードバーが途中で止まる
  • アップロードしても画像が表示されない

原因はひとつではなく、パーミッション・PHP設定・プラグインの競合・サーバー設定など複数のケースが存在します。

この記事ではエラーの種類別に原因と解決策を丁寧に解説します。


アップロードできない原因と対処法

1. 「HTTPエラー」が出る

アップロードバーが進んで最後に「HTTPエラー」と表示されるケースです。原因が広範囲にまたがるため最も厄介なエラーです。

原因1:PHPのメモリ不足

対処法:

wp-config.php に以下を追加します。

define('WP_MEMORY_LIMIT', '256M');

ただし、実際に効くかどうかはサーバー設定次第です。

優先順位(上が強い)
サーバー本体の設定(php.ini)
        ↓
.htaccess の設定
        ↓
wp-config.php の WP_MEMORY_LIMIT   ← ここ
        ↓
WordPress のデフォルト(40MB)

つまり、サーバー側が「128M上限」と決めていたら、wp-config.phpで256Mと書いても128Mにしかならないです。WordPressがサーバーの上限を超えることはできません。
解決しない場合は php.ini の変更が必要です。
ホスティングの管理パネル(cPanel等)から確認してください。

原因2:画像編集ライブラリの問題(GD / Imagick)

WordPressは画像リサイズにGDライブラリまたはImagickを使用します。どちらかが正常に動作していない場合にHTTPエラーが発生します。

現在使用中のライブラリを確認する方法:

管理画面 → 「ツール」→「サイトヘルス」→「情報」→「メディア処理」で確認できます。

Imagickでエラーが出ている場合の対処法:

wp-config.php に以下を追加するとImagickによる画像編集の上書き保存を有効にし、動作が安定することがあります。

define( 'IMAGE_EDIT_OVERWRITE', true );

それでも解決しない場合は、ホスティング会社にImagickの動作状況を問い合わせるか、サーバーの管理パネルからImagickを再有効化してください。

補足: WordPress 6.3以降、GD LibraryとImagickを手動で切り替えるUIは廃止されました。現在はWordPressが自動で適切なライブラリを選択します。

原因3:セッションタイムアウト

長時間ページを開いたままアップロードしようとするとセッションが切れます。

対処法: ブラウザを更新して再ログインしてからアップロードを試みます。

原因4:プラグインの競合

セキュリティプラグインや画像最適化プラグインがアップロード処理を妨害していることがあります。

対処法:

  1. 全プラグインを一時的に無効化
  2. アップロードを試みる
  3. 成功した場合、プラグインを1つずつ有効化して原因を特定

2. 「このファイルタイプはアップロードできません」

セキュリティ上の理由でブロックされているケースです。

原因1:WordPressが許可していないファイル形式

WordPressはデフォルトで許可するファイル形式を制限しています。SVGファイルはデフォルトで許可されていません。

対処法(SVGの場合):

functions.php に以下を追加します。

/**
 * SVGファイルのアップロードを許可する
 * 注意: 管理者・編集者権限を持つ信頼できるユーザーのみが使用する環境で利用してください
 */

// SVGのMIMEタイプを許可リストに追加
function allow_svg_uploads( $mimes ) {
    if ( current_user_can( 'manage_options' ) ) {
        $mimes['svg']  = 'image/svg+xml';
        $mimes['svgz'] = 'image/svg+xml';
    }
    return $mimes;
}
add_filter( 'upload_mimes', 'allow_svg_uploads' );

// WordPress 5.1以降のファイル検証チェックをパス
function fix_svg_mime_type( $data, $file, $filename, $mimes ) {
    $ext = strtolower( pathinfo( $filename, PATHINFO_EXTENSION ) );
    if ( $ext === 'svg' || $ext === 'svgz' ) {
        $data['ext']  = $ext;
        $data['type'] = 'image/svg+xml';
    }
    return $data;
}
add_filter( 'wp_check_filetype_and_ext', 'fix_svg_mime_type', 10, 4 );

このコードについて:

  • current_user_can( 'manage_options' ) により、管理者権限を持つユーザーのみSVGをアップロードできます
  • wp_check_filetype_and_ext フィルターへの対応により、WordPress 5.1以降でも正しく動作します
  • svgz(圧縮SVG)にも対応しています

注意: SVGファイルはJavaScriptを内包できるため、XSS(クロスサイトスクリプティング)攻撃のリスクがあります。
不特定多数がアップロードできる環境(会員サイト・マルチサイト等)では使用しないでください。
安全にSVGを扱いたい場合は「Safe SVG」などの専用プラグインの利用を推奨します。

原因2:ファイル名に日本語・特殊文字が含まれている

日本語ファイル名の画像はアップロードに失敗することがあります。

対処法: ファイル名を image-001.jpg のような半角英数字に変更してから再アップロードしてください。


3. アップロードはできるが画像が表示されない

アップロード自体は成功しているのに、記事やメディアライブラリで画像が表示されないケースです。

原因1:uploadsフォルダのパーミッションが正しくない

wp-content/uploads フォルダのパーミッションが適切でないと、ファイルは保存されても読み取りができません。

対処法:

FTPクライアント(FileZilla等)で wp-content/uploads フォルダのパーミッションを確認します。

  • フォルダ: 755
  • ファイル: 644

パーミッションが異なる場合は上記の値に変更してください。

原因2:.htaccessの設定が壊れている

対処法:

  1. WordPress管理画面 → 「設定」→「パーマリンク設定」
  2. 何も変更せず「変更を保存」をクリック

これで .htaccess が自動的に再生成されます。

原因3:キャッシュプラグインの影響

キャッシュが古い状態で残っているため、新しい画像が表示されないことがあります。

対処法: キャッシュプラグインのキャッシュをクリアします。W3 Total Cache・WP Super Cache・LiteSpeed Cacheなど、使用しているプラグインの管理画面から「キャッシュを削除」を実行してください。


4. アップロード容量の上限エラー

「アップロードされたファイルがサーバーの最大アップロードサイズを超えています。」というメッセージが出るケースです。

アップロード上限はPHPの設定値 upload_max_filesizepost_max_size によって決まります。これらはPHPの実行中に動的変更できない設定値のため、wp-config.phpの ini_set() では変更できません。 以下の方法で変更してください。

対処法1(推奨):ホスティングの管理パネルから変更

Xserver・ConoHa・さくらのレンタルサーバーなど、国内の主要サーバーはコントロールパネルのPHP設定画面から変更できます。サーバーの管理画面で「PHP設定」または「PHP.ini設定」を探してください。

対処法2:php.iniを編集

ホスティングのルートディレクトリまたは該当ディレクトリに php.ini ファイルを作成・編集します。

upload_max_filesize = 64M
post_max_size = 64M
memory_limit = 256M
max_execution_time = 300

注意: post_max_sizeupload_max_filesize 以上の値に設定してください。post_max_size が小さいとアップロード自体は受け付けても処理に失敗します。

補足: memory_limitWP_MEMORY_LIMIT 定数(wp-config.php)でも変更できますが、php.ini でまとめて管理するとわかりやすくなります。

対処法3:.htaccessに追記(mod_php環境のみ)

php_value upload_max_filesize 64M
php_value post_max_size 64M
php_value memory_limit 256M
php_value max_execution_time 300

重要な注意: この方法はApacheのmod_phpとして動作している環境でのみ有効です。現在の主要なレンタルサーバーはPHP-FPM(FastCGI)で動作しているため、この記述は無視されるか500エラーを引き起こす可能性があります。試す場合はバックアップを取ってから行い、500エラーが発生した場合は即座に削除してください。


5. アップロードフォルダが存在しない・書き込めない

「アップロードディレクトリが存在しないか、書き込み不可です」というエラーが出るケースです。

対処法1:フォルダを手動作成

FTPで wp-content/uploads フォルダが存在するか確認します。存在しない場合は手動で作成し、パーミッションを 755 に設定します。

対処法2:WordPressの設定からアップロードパスを確認・修正

管理画面 → 「設定」→「メディア」の「ファイルのアップロード先」が正しいパスになっているか確認します。デフォルトは wp-content/uploads です。空欄の場合も問題が発生することがあるため、明示的に入力して保存してください。


それでも解決しない場合のチェックリスト

上記の対処法を試しても解決しない場合、以下を順番に確認してください。

  1. ブラウザのキャッシュをクリアしてから再試行
  2. 別のブラウザでアップロードを試みる
  3. 別の画像ファイルでアップロードを試みる(特定ファイルの問題の可能性)
  4. テーマを一時的にデフォルトテーマ(Twenty Twenty-Four等)に切り替えて試みる
  5. セキュリティプラグイン(Wordfence、SiteGuard等)を一時無効化して試みる
  6. ホスティング会社のサポートに問い合わせ(サーバー側の制限の可能性)

WordPressのメディアアップロード関連の設定まとめ

設定ファイル設定できる内容備考
wp-config.phpメモリ上限(WP_MEMORY_LIMITupload_max_filesize / post_max_size はここでは変更不可
php.iniアップロード容量上限、メモリ上限、実行時間最も確実な方法
.htaccessアップロード容量上限、メモリ上限、実行時間mod_php環境のみ有効。PHP-FPMでは効かない
functions.php許可するファイル形式の追加
サーバーパーミッションuploadsフォルダの読み書き権限フォルダ755・ファイル644が基本

まとめ

WordPressで画像がアップロードできない原因は多岐にわたりますが、ほとんどのケースは以下のいずれかで解決します。

HTTPエラー → PHPメモリ上限を増やす・プラグイン競合を確認

ファイルタイプエラー → ファイル名を半角英数字に変更・許可形式を追加

画像が表示されない → パーミッション確認・.htaccess再生成・キャッシュクリア

容量エラー → ホスティングの管理パネルまたはphp.iniでアップロード上限を引き上げ

フォルダエラー → uploadsフォルダを手動作成・パーミッションを755に設定

エラーメッセージをよく確認し、該当する原因から順番に試していきましょう。