Как изменить пути загрузки файлов в WordPress без плагинов

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

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

Чаще всего причины следующие:

  • Упорядочивание медиафайлов: если на сайте много медиа, удобно разделить их по папкам, например, по типу содержимого (изображения, документы, видео).
  • Безопасность: расположение файлов вне стандартных путей может затруднить прямой доступ к ним.
  • Интеграция со сторонними сервисами: иногда нужно, чтобы файлы хранились в другой директории, например, для синхронизации с CDN или облачными хранилищами.
  • Оптимизация резервного копирования: разделение папок позволяет точнее настраивать бэкапы.

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

Путь к директории загрузки хранится в глобальной переменной $upload_dir, которую возвращает функция wp_upload_dir(). Она возвращает массив с ключами:

  • path — абсолютный путь к папке загрузки;
  • url — URL для доступа к папке загрузки;
  • subdir — подкаталог с датой (если включена организация по датам);
  • basedir — основной путь без подкаталога;
  • baseurl — базовый URL без подкаталога.

Для изменения путей нужно переопределить эти параметры, используя фильтр upload_dir.

Изменение пути и URL загрузки с помощью фильтра upload_dir

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

add_filter('upload_dir', 'wpupload_custom_upload_dir');
function wpupload_custom_upload_dir($dirs) {
    // Новая базовая директория для загрузок
    $custom_dir = WP_CONTENT_DIR . '/custom_uploads';
    // Новая базовая URL для загрузок
    $custom_url = content_url('/custom_uploads');

    // Пример: отключаем разбивку по датам
    $dirs['path'] = $custom_dir;
    $dirs['url'] = $custom_url;
    $dirs['basedir'] = $custom_dir;
    $dirs['baseurl'] = $custom_url;
    $dirs['subdir'] = '';

    return $dirs;
}

В этом примере все файлы будут загружаться в папку wp-content/custom_uploads. Если папка не существует, её нужно создать с правами на запись.

Как добавить разбивку по месяцам в новом пути

Если хотите сохранить привычную структуру с папками по дате, можно так:

add_filter('upload_dir', 'wpupload_custom_upload_dir_with_subdir');
function wpupload_custom_upload_dir_with_subdir($dirs) {
    $custom_dir = WP_CONTENT_DIR . '/custom_uploads';
    $custom_url = content_url('/custom_uploads');

    // Сохраняем подкаталог с датой
    $dirs['path'] = $custom_dir . $dirs['subdir'];
    $dirs['url'] = $custom_url . $dirs['subdir'];
    $dirs['basedir'] = $custom_dir;
    $dirs['baseurl'] = $custom_url;

    return $dirs;
}

Так файлы будут сохраняться в wp-content/custom_uploads/2024/06 и аналогично по URL.

Примеры более сложных сценариев изменения путей загрузки

Разделение по типам файлов

Можно направлять разные типы контента в отдельные папки. Например, изображения в images, документы в docs:

add_filter('upload_dir', 'wpupload_split_by_filetype');
function wpupload_split_by_filetype($dirs) {
    if (!empty($_FILES['async-upload']['name'])) {
        $filename = $_FILES['async-upload']['name'];
        $ext = pathinfo($filename, PATHINFO_EXTENSION);
        
        switch (strtolower($ext)) {
            case 'jpg':
            case 'jpeg':
            case 'png':
            case 'gif':
                $subdir = '/images';
                break;
            case 'pdf':
            case 'doc':
            case 'docx':
                $subdir = '/docs';
                break;
            default:
                $subdir = '/others';
        }

        $dirs['path'] = $dirs['basedir'] . $subdir . $dirs['subdir'];
        $dirs['url'] = $dirs['baseurl'] . $subdir . $dirs['subdir'];
        $dirs['subdir'] = $subdir . $dirs['subdir'];
    }
    return $dirs;
}

В этом случае, если загружаемая картинка, она попадёт в /uploads/images/, а PDF — в /uploads/docs/.

Динамическое изменение пути в зависимости от пользователя

Если на сайте много пользователей и нужен раздельный доступ к файлам, можно сохранять загрузки в папки по ID пользователя:

add_filter('upload_dir', 'wpupload_user_based_dir');
function wpupload_user_based_dir($dirs) {
    $user_id = get_current_user_id();
    if ($user_id) {
        $subdir = '/user_' . $user_id;
        $dirs['path'] = $dirs['basedir'] . $subdir . $dirs['subdir'];
        $dirs['url'] = $dirs['baseurl'] . $subdir . $dirs['subdir'];
        $dirs['subdir'] = $subdir . $dirs['subdir'];
    }
    return $dirs;
}

Это позволит каждому пользователю иметь собственную папку с загруженными файлами, упрощая управление правами доступа и организацию.

Советы по работе с изменёнными путями загрузки

Чтобы изменения прошли гладко, важно учитывать:

  • Права доступа. Убедитесь, что сервер имеет права на запись в новые папки.
  • Создание директорий. WordPress не всегда сам создаёт вложенные папки, может потребоваться создать их вручную или расширить функцию для автосоздания.
  • Резервное копирование. Не забудьте включить новые папки в план резервного копирования.
  • URL и доступ. Проверьте, что URL новых папок корректны и доступны для загрузки и отображения файлов.
  • Совместимость с плагинами. Некоторые плагины могут жёстко работать с путями по умолчанию. Тестируйте функционал после внесения изменений.

Заключение

Изменение путей загрузки в WordPress даёт гибкость в организации хранения медиафайлов и может повысить безопасность и удобство работы с контентом. Использование фильтра upload_dir — самый простой и надежный способ сделать это без плагинов. Применяйте приведённые примеры, адаптируя их под свои задачи.

Для расширенных возможностей по управлению загрузками и оптимизации советуем ознакомиться с плагинами от WPSHOP, которые помогут автоматизировать многие процессы, связанные с загрузкой и хранением файлов.

Как защитить загружаемые файлы WordPress от неавторизованного доступа
12.04.2026
Как использовать WP Upload Dir для разделения файлов в WordPress
25.02.2026
Система отложенной загрузки файлов в WordPress: подробное руководство
30.03.2026
Как использовать WP Filesystem API для работы с файлами в WordPress
16.04.2026
Как автоматически переименовать загруженные файлы в WordPress
23.01.2026

wp upload - это директория в WP для загрузки файлов. Подробнее про загрузку файлов в админку можно почитать на этой странице.