WordPress не загружает изображения в медиабиблиотеку — как исправить
WordPress не загружает изображения в медиабиблиотеку — обычно из-за неверных прав на папки wp-content/uploads или ограничений PHP на размер файла. В большинстве случаев достаточно поправить права через FTP или увеличить upload_max_filesize в php.ini. Если не помогло — проблема в плагине, теме или конфигурации PHP на хостинге.
Почему WordPress не загружает изображения
Проблема проявляется по-разному: загрузка обрывается на 50-99%, файла нет в медиабиблиотеке, или появляется ошибка «HTTP error», «Не удалось создать каталог» или «Не хватает памяти». Вот 4 основные причины.
- Неверные права на папку uploads — самая частая причина после переезда сайта или смены хостинга. PHP не может создать подпапку под год/месяц, и WordPress молча обрывает загрузку.
- Маленький лимит PHP на загрузку файлов — типовая настройка на дешёвом хостинге:
upload_max_filesize = 2M,post_max_size = 8M. Даже скриншот 1.5 MB может не пройти из-за накладных расходов. - Конфликт плагинов или темы — особенно после обновления. Плагины кэширования (WP Rocket, LiteSpeed Cache), оптимизации изображений (Smush, EWWW, ShortPixel) и некоторые конструкторы тем могут блокировать стандартную загрузку.
- Ошибки конфигурации PHP —
memory_limitниже 128M, отключеныgdилиimagick, неверныйmax_execution_time. Часто встречается на старых серверах после миграции.
Как исправить — пошаговая инструкция
Шаг 1. Проверьте права на папку uploads
Подключитесь по FTP (FileZilla или любой клиент). Перейдите в /wp-content/uploads/.
Папка uploads должна иметь права 755 (drwxr-xr-x). Если видите 700 или 750 — проблема в этом.
В FileZilla: правый клик на папке uploads → File permissions → 755 → Recurse into subdirectories → Apply.
Если хостинг Beget с CloudLinux — уточните у поддержки: на некоторых тарифах включён fs_protect, который сбрасывает права. Решение — добавить правило в .htaccess или включить PHP-FPM в панели управления.
Шаг 2. Увеличьте лимиты PHP
Создайте в корне сайта файл php.ini со следующим содержимым (или добавьте в существующий):
upload_max_filesize = 64M
post_max_size = 64M
memory_limit = 256M
max_execution_time = 300
max_input_time = 300
На Beget и Timeweb свой php.ini не работает — нужно править через панель хостинга. На Beget: Сайты → Управление PHP → Версия PHP → Настройки PHP. На Timeweb: Хостинг → Управление сайтами → PHP-редактор. На Reg.ru: хостинг → PHP-настройки → Редактор php.ini.
Шаг 3. Настройка через .htaccess (альтернатива)
Если php.ini недоступен, добавьте в .htaccess в корне сайта:
php_value upload_max_filesize 64M
php_value post_max_size 64M
php_value memory_limit 256M
php_value max_execution_time 300
Это работает, если хостинг разрешает переопределение PHP-директив через .htaccess. На Reg.ru работает, на Beget — только для PHP-FPM режима.
Шаг 4. Отключите плагины для проверки
Временно деактивируйте все плагины оптимизации изображений: Smush, ShortPixel, EWWW Image Optimizer, Imagify, WebP Express. Попробуйте загрузить картинку снова.
Если заработало — включайте плагины по одному, пока не найдёте виновника. Чаще всего проблема в плагинах кэширования: WP Rocket и LiteSpeed Cache.
Плагины кэширования блокируют загрузку, потому что пытаются принудительно очистить кэш после добавления файла. На WP Rocket: Settings → Cache → очистите кэш и включите «Separate cache for mobile». На LiteSpeed: Cache → Purge All — и настройте Purge Policy.
Шаг 5. Временно переключитесь на стандартную тему
Активируйте тему Twenty Twenty-Four (или другую стандартную). Если изображения начали загружаться — проблема в вашей теме. Обратитесь к разработчику или проверьте functions.php на наличие кастомных хуков на загрузку.
Проверка результата
- Медиафайлы → Добавить новый. Выберите JPEG-файл 2-3 MB. Если загрузился без ошибки — проблема решена.
- Проверьте права на только что созданную подпапку:
/wp-content/uploads/2026/07/. Права должны быть755. - Проверьте PHP-лимиты: Админка → Инструменты → Здоровье сайта → Информация → Сервер. Значения
upload_max_filesizeиpost_max_sizeдолжны совпадать с теми, что вы задали. - Загрузите PNG 5 MB и WebP 1 MB — проверьте все популярные форматы.
Когда эти способы не сработают
Если загрузка всё равно не работает после всех шагов — проверьте три дополнительных сценария.
Сценарий 1: Beget + CloudLinux + fs_protect. Включите PHP-FPM в панели Beget (Сайты → Управление → Режим PHP → PHP-FPM). После этого права на uploads можно не менять — PHP работает от вашего пользователя, а не от nobody.
Сценарий 2: Cloudflare проксирует загрузку. Cloudflare по умолчанию ограничивает размер запроса 100 MB, но для очень больших файлов (>50 MB) может обрывать соединение. Временно включите Development Mode или создайте Page Rule для example.com/wp-admin/* с отключением прокси (DNS only).
Сценарий 3: Закончилось место на диске. Проверьте через панель хостинга: Бегет → Диски, Timeweb → Файловый менеджер → статистика. Если места нет — удалите старые бэкапы или увеличьте тариф.
Сценарий 4: PHP модули не установлены. Без gd или imagick WordPress не может создать превью. Проверьте: Админка → Здоровье сайта. Если видите предупреждение про GD library — включите в панели хостинга или напишите в поддержку.
Частые вопросы
/wp-content/uploads/2026/07/ через FTP. Затем установите плагин Media from FTP (или Add From Server) и просканируйте папку — плагин добавит файлы в медиабиблиотеку с генерацией всех размеров превью. Удобно при массовой загрузке или проблемах с загрузчиком WordPress.Не можете загрузить изображения? Нужна помощь с настройкой WordPress?
Разберу проблему за 1 час — права, PHP, плагины, сервер. Работаю удалённо, чек по факту.