Добавление пользовательского каталога для загрузки файлов в WordPress без плагинов

Диагностика проблемы: зачем нужен дополнительный каталог для загрузок в WordPress

Стандартный каталог загрузок WordPress — wp-content/uploads. Но часто возникает необходимость загружать файлы в отдельные каталоги вне этого пути, например, для кастомных типов записей, пользовательских форм или интеграций. Проблема в том, что по умолчанию WordPress не позволяет просто так менять путь загрузки без плагинов. Это вызывает ошибки загрузки, неправильные URL или потерю ссылок.

Как добавить пользовательский каталог для загрузки файлов без плагинов

Для решения задачи нужно:

  • Зарегистрировать новый каталог загрузки.
  • Изменить путь и URL загрузки файлов программно.
  • Обеспечить корректную работу медиа-библиотеки с новыми файлами.

Шаг 1. Создание пользовательского каталога

Создайте папку, например, wp-content/custom-uploads через FTP или SSH и убедитесь, что на неё выставлены права на запись (обычно 755 или 775).

Шаг 2. Изменение пути загрузки для определённого типа файлов

В functions.php вашей темы или в отдельном файле подключаемого модуля добавьте следующий код:

add_filter('upload_dir', function($dirs) {
    // Пример: менять каталог, если загружаются файлы для кастомного типа записи 'product'
    if (isset($_REQUEST['post_id'])) {
        $post_id = (int) $_REQUEST['post_id'];
        $post = get_post($post_id);
        if ($post && $post->post_type === 'product') {
            $custom_subdir = '/custom-uploads/products';
            $dirs['path'] = WP_CONTENT_DIR . $custom_subdir . $dirs['subdir'];
            $dirs['url'] = content_url() . $custom_subdir . $dirs['subdir'];
            $dirs['basedir'] = WP_CONTENT_DIR . $custom_subdir;
            $dirs['baseurl'] = content_url() . $custom_subdir;
        }
    }
    return $dirs;
});

Этот фильтр проверяет, принадлежит ли загружаемый файл посту типа product, и изменяет путь и URL загрузки на wp-content/custom-uploads/products с сохранением год/месяц из стандартного subdir.

Шаг 3. Проверка корректности загрузки и отображения

После внедрения кода загрузите медиафайл через редактор записи типа product. Проверьте:

  • Файл физически появился в wp-content/custom-uploads/products/год/месяц.
  • URL файла в медиабиблиотеке отображается корректно и доступен по сети.
  • При вставке в пост файл отображается без ошибок 404.

Как проверить, что всё работает

  • Загрузите файл через стандартную форму загрузки для поста нужного типа.
  • Откройте FTP или файловый менеджер и убедитесь, что файл лежит в новом каталоге.
  • В админке перейдите в «Медиафайлы», найдите загруженный файл и скопируйте его URL — откройте в браузере.
  • Проверьте, что файл доступен и отображается корректно.

Частые ошибки и как исправить

  • Ошибка 404 при попытке открыть файл: проверьте права доступа на каталог и файлы, а также правильность формирования URL. Важно, чтобы baseurl совпадал с физическим расположением.
  • Файлы не загружаются: убедитесь, что папка существует и доступна для записи веб-сервером.
  • Изменения не применяются: возможно, кэш страниц или плагинов, попробуйте очистить кэш и перезагрузить страницу.

Практические советы по безопасности и производительности

  • Не давайте права на запись всему wp-content, а только нужному каталогу.
  • Регулярно проверяйте права доступа через FTP.
  • Используйте .htaccess или конфигурацию сервера для защиты приватных каталогов от индексации и прямого доступа, если нужно.
  • Для крупных сайтов с большим потоком загрузок разбивайте каталоги по датам и типам, чтобы не нагружать файловую систему.

Сравнение вариантов реализации

ВариантПлюсыМинусыКогда использовать
Фильтр upload_dir в functions.phpГибкость, нет плагинов, полный контрольНужно разбираться в коде, возможны ошибкиЕсли требуется тонкая настройка пути загрузки
Плагины для кастомных загрузокПростота установки и настройкиЗависимость от стороннего кода, нагрузкаДля быстрых решений без программирования
Как автоматизировать создание и удаление чистокодов в WordPress
22.03.2026
Как автоматизировать удалённые обновления в WordPress без плагинов
13.03.2026
Как добавить логику вызова шорткода в WordPress
04.02.2026
Как добавить и менять атрибуты товара в WooCommerce через AJAX без перезагрузки страницы
26.04.2026
Как создать собственный REST API в WordPress с примерами кода
26.11.2025