Как добавить уникальный файловый заголовок (Content-Disposition) в WordPress

В некоторых случаях на сайте WordPress необходимо контролировать, как браузер пользователя обрабатывает скачиваемые файлы. Для этого используется HTTP заголовок Content-Disposition. Он позволяет задать имя файла для сохранения, а также управлять тем, будет ли файл открываться в браузере или скачиваться напрямую.

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

Что такое заголовок Content-Disposition и зачем он нужен в WordPress

Заголовок Content-Disposition отвечает за способ обработки файла браузером. Его параметры:

  • inline — файл открывается непосредственно в браузере (например, PDF или изображение);
  • attachment — браузер предлагает скачать файл с указанным именем.

Пример корректного заголовка для скачивания: Content-Disposition: attachment; filename="document.pdf".

В WordPress файлы могут быть загружены через медиабиблиотеку, плагинами или напрямую по URL. В некоторых случаях, например, при продаже цифровых товаров или предоставлении отчетов, важно гарантировать правильное имя файла при скачивании. Без настройки Content-Disposition браузер может сохранять файл с некорректным именем или открывать его в окне.

Как настроить уникальный Content-Disposition с помощью кода в WordPress

Давайте рассмотрим пример, как добавить заголовок Content-Disposition для файлов, отдаваемых через WordPress. Предположим, у вас есть специальный обработчик скачивания, например, через AJAX или кастомный PHP-файл.

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

function wplist_add_content_disposition_header($file_path, $download_name = '') {
    if (!file_exists($file_path)) {
        status_header(404);
        exit('Файл не найден');
    }

    // Определяем имя файла для скачивания
    $filename = $download_name ? $download_name : basename($file_path);

    // Очищаем буфер вывода
    if (ob_get_length()) ob_end_clean();

    header('Content-Description: File Transfer');
    header('Content-Type: application/octet-stream');
    header('Content-Disposition: attachment; filename="' . rawurlencode($filename) . '"');
    header('Content-Transfer-Encoding: binary');
    header('Expires: 0');
    header('Cache-Control: must-revalidate');
    header('Pragma: public');
    header('Content-Length: ' . filesize($file_path));

    readfile($file_path);
    exit;
}

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

Пример использования

Создадим кастомную страницу скачивания:

add_action('template_redirect', 'wplist_custom_file_download');
function wplist_custom_file_download() {
    if (isset($_GET['wplist_download'])) {
        $file = WP_CONTENT_DIR . '/uploads/custom_file.pdf';
        $download_name = 'otchet_' . date('Y-m-d') . '.pdf';
        wplist_add_content_disposition_header($file, $download_name);
    }
}

Теперь, перейдя по URL https://example.com/?wplist_download=1, пользователь скачает файл с уникальным именем, например, otchet_2024-06-01.pdf.

Использование плагинов для управления Content-Disposition

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

  • Download Monitor — плагин для управления загрузками с настройкой заголовков и имен файлов. Позволяет создавать защищенные ссылки на файлы и управлять скачиваниями.
  • WP Force Download — простой плагин для принудительной отправки файлов с нужными заголовками, включая Content-Disposition.
  • Clearfy Pro — в этой комплексной оптимизационной сборке есть модули для контроля HTTP заголовков и безопасности загрузок.

Ссылки на плагины можно найти на WPSHOP.ru.

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

Безопасность скачиваемых файлов

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

Кодировка имени файла в заголовках

Чтобы избежать проблем с кириллицей и пробелами в имени файла, используйте функцию rawurlencode для имени файла в заголовке Content-Disposition, как показано в примерах выше. Это обеспечит правильное распознавание имени на всех браузерах.

Обработка больших файлов

Для больших файлов лучше не читать их целиком через readfile(), а использовать функции постраничной передачи или серверные решения типа X-Sendfile. Это уменьшит нагрузку на PHP и улучшит производительность.

Итог

Управление заголовком Content-Disposition в WordPress — полезный навык для любого разработчика, работающего с файлами. Вы можете легко сделать скачивание файлов удобным и корректным, используя простой PHP-код или надежные плагины. Важно помнить про безопасность и правильную кодировку имен файлов.

Как избежать фейковых регистраций в WordPress: проверенные методы и примеры
24.12.2025
Как добавить уникальный файловый заголовок (Content-Disposition) в WordPress
02.04.2026
Как удалить все старые метаданные в WordPress
09.02.2026
Как отключить pingbacks и trackbacks в WordPress
12.01.2026
WooCommerce: как настроить авторизацию по email вместо логина
02.05.2026