Как разрешить пользователям загружать файлы в WordPress по расширениям

По умолчанию WordPress ограничивает типы файлов, которые пользователи могут загружать через медиа-библиотеку или формы загрузки. Это сделано в целях безопасности, чтобы избежать загрузки потенциально опасных файлов. Однако в ряде случаев необходимо расширить список разрешённых расширений, чтобы, например, позволить загружать архивы, документы нестандартных форматов, SVG-файлы или другие специфические типы.

Почему WordPress ограничивает типы загружаемых файлов

WordPress использует внутренний список разрешённых MIME-типов и расширений файлов. Если расширение не входит в этот список, загрузка будет запрещена с ошибкой. Это помогает защитить сайт от внедрения вредоносных скриптов и других угроз.

Тем не менее, если вы уверены в безопасности определённых типов файлов, можно расширить список разрешённых файлов, не снижая общую защиту сайта.

Как разрешить новые расширения через functions.php

Самый простой способ добавить новые расширения — использовать фильтр wpma_mime_types (префикс wpma добавлен для уникальности функций в данном примере). Вставьте следующий код в файл functions.php вашей темы или в плагин для кастомных функций:

function wpma_allow_custom_mime_types( $mimes ) {
    // Добавляем разрешённые расширения
    $mimes['svg'] = 'image/svg+xml';
    $mimes['zip'] = 'application/zip';
    $mimes['csv'] = 'text/csv';
    $mimes['docx'] = 'application/vnd.openxmlformats-officedocument.wordprocessingml.document';
    return $mimes;
}
add_filter( 'upload_mimes', 'wpma_allow_custom_mime_types' );

Этот код добавляет поддержку SVG, ZIP, CSV и DOCX. Вы можете добавить или удалить расширения по необходимости, указывая правильные MIME-типы.

Пояснение по MIME-типам

Важно указывать корректные MIME-типы, иначе браузеры и серверы могут некорректно обрабатывать файлы. Список MIME-типов можно посмотреть в официальном реестре IANA или на wpshop.ru.

Как разрешить загрузку SVG с безопасной обработкой

SVG-файлы — это текстовые XML-документы, их можно модифицировать для внедрения вредоносного кода. Поэтому по умолчанию WordPress запрещает загрузку SVG. Для безопасной работы с SVG можно использовать плагин Safe SVG, который проверяет и очищает содержимое SVG перед загрузкой.

Установка плагина:

  1. В админке WordPress перейдите Плагины > Добавить новый.
  2. Поиск по слову Safe SVG.
  3. Установите и активируйте плагин.

Плагин автоматически разрешит загрузку SVG и обеспечит безопасность.

Пример создания пользовательской формы загрузки с фильтрацией расширений

Если вы хотите разрешить загрузку файлов с определёнными расширениями через кастомную форму на сайте, можно использовать следующий пример кода с AJAX и проверкой расширений.

add_action('wp_enqueue_scripts', 'wpma_enqueue_upload_script');
function wpma_enqueue_upload_script() {
    wp_enqueue_script('wpma-upload', get_template_directory_uri() . '/js/wpma-upload.js', array('jquery'), null, true);
    wp_localize_script('wpma-upload', 'wpma_upload_obj', array(
        'ajax_url' => admin_url('admin-ajax.php'),
        'nonce' => wp_create_nonce('wpma_upload_nonce')
    ));
}

add_action('wp_ajax_wpma_custom_upload', 'wpma_custom_upload_handler');
add_action('wp_ajax_nopriv_wpma_custom_upload', 'wpma_custom_upload_handler');

function wpma_custom_upload_handler() {
    check_ajax_referer('wpma_upload_nonce', 'nonce');

    if (empty($_FILES['file'])) {
        wp_send_json_error('Файл не загружен');
    }

    $file = $_FILES['file'];
    $allowed_exts = array('jpg', 'png', 'pdf', 'docx');
    $ext = pathinfo($file['name'], PATHINFO_EXTENSION);

    if (!in_array(strtolower($ext), $allowed_exts)) {
        wp_send_json_error('Недопустимый тип файла');
    }

    require_once(ABSPATH . 'wp-admin/includes/file.php');
    $overrides = array('test_form' => false);
    $movefile = wp_handle_upload($file, $overrides);

    if ($movefile && !isset($movefile['error'])) {
        wp_send_json_success(array('url' => $movefile['url']));
    } else {
        wp_send_json_error($movefile['error']);
    }
}

Этот код принимает файл, проверяет расширение и загружает его в стандартную папку WordPress. Чтобы использовать, создайте форму с AJAX-запросом на admin-ajax.php с действием wpma_custom_upload.

JavaScript для отправки файла через AJAX

jQuery(document).ready(function($) {
    $('#wpma-upload-form').on('submit', function(e) {
        e.preventDefault();
        var fileInput = $('#wpma-file')[0];
        if (fileInput.files.length === 0) {
            alert('Выберите файл');
            return;
        }
        var formData = new FormData();
        formData.append('action', 'wpma_custom_upload');
        formData.append('nonce', wpma_upload_obj.nonce);
        formData.append('file', fileInput.files[0]);

        $.ajax({
            url: wpma_upload_obj.ajax_url,
            type: 'POST',
            data: formData,
            processData: false,
            contentType: false,
            success: function(response) {
                if (response.success) {
                    alert('Файл успешно загружен: ' + response.data.url);
                } else {
                    alert('Ошибка: ' + response.data);
                }
            }
        });
    });
});

Плагины для расширенного управления загрузками

Если хочется более продвинутого функционала без ручного кода, рекомендую обратить внимание на следующие плагины:

  • WP User Frontend — позволяет создавать пользовательские формы загрузки с гибкой настройкой типов файлов.
  • File Upload Types by WPForms — расширяет типы разрешённых файлов для форм, созданных с WPForms.
  • Clearfy Pro — среди множества оптимизаций есть удобные настройки безопасности и медиа.

Все эти решения помогут не только добавить поддержки новых расширений, но и контролировать процесс загрузки, обеспечивая безопасность и удобство.

Безопасность при работе с расширениями файлов

При расширении списка загружаемых файлов всегда помните о безопасности:

  • Добавляйте только проверенные и необходимые расширения.
  • Используйте плагины для фильтрации содержимого, особенно для SVG и документов Office.
  • Ограничивайте права загрузки для определённых ролей пользователей.
  • Регулярно обновляйте плагины и ядро WordPress.

Таким образом, вы сможете расширить функционал загрузки файлов и при этом сохранить безопасность сайта.

Как автоматизировать удаление старых записей в WordPress через AJAX
29.01.2026
Оптимизация WordPress для мобильных устройств: практические советы и примеры
30.11.2025
Отладка конфликтов плагинов WordPress — практическое руководство от WPMA
07.12.2025
Как автоматически удалять неиспользуемые термины таксономий в WordPress
08.04.2026
Как автоматизировать удаление неиспользуемых шорткодов в WordPress
23.03.2026