Хук wp_check_filetype_and_ext
позволяет изменять MIME-тип загружаемого файла, а также корректировать его расширение и имя. Этот фильтр часто используется для корректного распознавания файлов WordPress, особенно если стандартные проверки MIME-типа не определяют его корректно.
apply_filters( ‘wp_check_filetype_and_ext’, array $wp_check_filetype_and_ext, string $file, string $filename, string[]|null $mimes, string|false $real_mime )
Функция wp_check_filetype_and_ext()
в WordPress проверяет соответствие файла его MIME-типу и расширению. Хук wp_check_filetype_and_ext
позволяет разработчикам изменять результаты проверки. Это полезно, например, для разрешения загрузки файлов, которые WordPress определяет неправильно, или для добавления поддержки новых типов файлов.
Параметры
- $wp_check_filetype_and_ext(array): Массив данных о файле с ключами:
ext
— расширение файла.type
— MIME-тип файла.proper_filename
— корректное имя файла с правильным расширением.
- $file (string): Полный путь к файлу.
- $filename (string): Имя файла (может отличаться от
$file
, так как путь к файлу может быть временным). - $mimes (string[]|null): Ассоциативный массив MIME-типов, где ключами являются расширения файлов, либо
null
, если массив не указан. - $real_mime (string|false): Фактический MIME-тип файла, если его удалось определить, иначе
false
.
Добавление поддержки загрузки CSV-файлов
WordPress по умолчанию может не всегда корректно распознавать CSV-файлы. Чтобы разрешить загрузку файлов CSV, можно использовать следующий код:
add_filter( 'wp_check_filetype_and_ext', 'allow_csv_uploads', 10, 5 );
function allow_csv_uploads( $wp_check_filetype_and_ext, $file, $filename, $mimes, $real_mime ) {
$ext = pathinfo( $filename, PATHINFO_EXTENSION );
if ( 'csv' === $ext ) {
$wp_check_filetype_and_ext['ext'] = 'csv';
$wp_check_filetype_and_ext['type'] = 'text/csv';
}
return $wp_check_filetype_and_ext;
}
Здесь мы проверяем, имеет ли файл расширение .csv
, и если да, то явно указываем его MIME-тип как text/csv
.
Разрешение загрузки SVG-файлов
SVG-файлы часто блокируются по умолчанию, так как могут содержать небезопасный контент. Однако, при необходимости их загрузки, можно указать правильный MIME-тип для SVG:
add_filter( 'wp_check_filetype_and_ext', 'allow_svg_uploads', 10, 5 );
function allow_svg_uploads( $wp_check_filetype_and_ext, $file, $filename, $mimes, $real_mime ) {
$ext = pathinfo( $filename, PATHINFO_EXTENSION );
if ( 'svg' === $ext ) {
$wp_check_filetype_and_ext['ext'] = 'svg';
$wp_check_filetype_and_ext['type'] = 'image/svg+xml';
}
return $wp_check_filetype_and_ext;
}
Этот код разрешает загрузку SVG, корректно задавая MIME-тип как image/svg+xml
.
Изменение MIME-типа для определенного типа пользователя
Этот пример показывает, как можно разрешить загрузку текстовых файлов с расширением .log
только администраторам:
add_filter( 'wp_check_filetype_and_ext', 'allow_log_files_for_admins', 10, 5 );
function allow_log_files_for_admins( $wp_check_filetype_and_ext, $file, $filename, $mimes, $real_mime ) {
$ext = pathinfo( $filename, PATHINFO_EXTENSION );
if ( 'log' === $ext && current_user_can( 'administrator' ) ) {
$wp_check_filetype_and_ext['ext'] = 'log';
$wp_check_filetype_and_ext['type'] = 'text/plain';
}
return $wp_check_filetype_and_ext;
}
В этом случае только администраторы смогут загружать .log
файлы. MIME-тип устанавливается как text/plain
.
Ограничение MIME-типа на основе названия файла
Предположим, вам нужно запретить загрузку файлов с именем suspicious-file.php
, даже если расширение указано как .txt
. Можно использовать следующий код:
add_filter( 'wp_check_filetype_and_ext', 'block_suspicious_filenames', 10, 5 );
function block_suspicious_filenames( $wp_check_filetype_and_ext, $file, $filename, $mimes, $real_mime ) {
if ( 'suspicious-file.php' === $filename ) {
$wp_check_filetype_and_ext['ext'] = false;
$wp_check_filetype_and_ext['type'] = false;
}
return $wp_check_filetype_and_ext;
}
Этот код устанавливает значения ext
и type
как false
, чтобы WordPress не принимал файл с именем suspicious-file.php
, даже если его расширение безопасно.
Проверка реального MIME-типа для корректного отображения документов
В этом примере мы проверяем реальный MIME-тип загружаемого PDF-файла и исправляем его в случае ошибки.
add_filter( 'wp_check_filetype_and_ext', 'correct_pdf_mime_type', 10, 5 );
function correct_pdf_mime_type( $wp_check_filetype_and_ext, $file, $filename, $mimes, $real_mime ) {
$ext = pathinfo( $filename, PATHINFO_EXTENSION );
if ( 'pdf' === $ext && 'application/octet-stream' === $real_mime ) {
$wp_check_filetype_and_ext['ext'] = 'pdf';
$wp_check_filetype_and_ext['type'] = 'application/pdf';
}
return $wp_check_filetype_and_ext;
}
В этом коде, если реальный MIME-тип файла определен неверно как application/octet-stream
, мы исправляем его на application/pdf
.
Заключение
Хук wp_check_filetype_and_ext
предоставляет гибкие возможности для управления MIME-типами файлов, загружаемых в WordPress. С его помощью можно добавлять поддержку новых форматов, ограничивать загрузку определенных файлов и контролировать безопасность файлов на сайте.