wp_check_filetype_and_extхук-фильтрWP 3.0.0

Позволяет проверить загружаемый файл и изменить его реальный тип (MIME тип).

При загрузке файла WP проверяет реальный тип файла (не то что указано в расширении имени файла). Делается это функцией wp_check_filetype_and_ext(). Этот фильтр позволяет изменить результат работы этой функции.

Когда может пригодится хук?

Когда, например, нужно по ролям (или другим условиям) разрешать или запрещать загрузку файлов разных размеров, типов, расширений, названий и т.д.

Например:

Мы хотим разрешить загрузку SVG файлов. И добавили mime тип SVG файла в разрешенные миме типы:

add_filter( 'upload_mimes', function ( $mimes ) {
	$mimes['svg'] = 'image/svg+xml';
	return $mimes;
} );

Пробуем загрузить svg файл и видим ошибку:

Так происходит, потому что после проверки функцией wp_check_filetype_and_ext(), реальный миме тип SVG файла определится как 'text/plain' и функция вернет пустые данные типа файла (проверка типа файла не пройдена).

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

Использование

add_filter( 'wp_check_filetype_and_ext', 'wp_kama_check_filetype_and_ext_filter', 10, 5 );

/**
 * Function for `wp_check_filetype_and_ext` filter-hook.
 * 
 * @param array         $wp_check_filetype_and_ext Values for the extension, mime type, and corrected filename.
 * @param string        $file                      Full path to the file.
 * @param string        $filename                  The name of the file (may differ from $file due to $file being in a tmp directory).
 * @param string[]|null $mimes                     Array of mime types keyed by their file extension regex, or null if none were provided.
 * @param string|false  $real_mime                 The actual mime type or false if the type cannot be determined.
 *
 * @return array
 */
function wp_kama_check_filetype_and_ext_filter( $wp_check_filetype_and_ext, $file, $filename, $mimes, $real_mime ){

	// filter...
	return $wp_check_filetype_and_ext;
}
$data(массив)

Данные файла в виде массива с ключами:

  • ext - расширение, например txt (file.txt)
  • type - миме тип, например text/plain
  • proper_filename - правильное имя файла.
    • Если указано, заменит элемент массива 'name' данных файла для загрузки: имя из $_FILES['name'].
    • Если не указано, имя будет использоваться оригинальное.
$file(строка)
Путь до файла. Например: userdata\temp\phpF581.tmp
$filename(строка)
Имя файла, например wp-amp-plugin_043848.svg.
$mimes(массив/false)
Массив названий разрешенных расширений и типов файлов. Если false, то это значит что будут взяты значения функции get_allowed_mime_types().
$real_mime(строка/true/false)
Реальный миме тип или false, когда не удалось получить миме тип.

Примеры

0

#1 Демонстрация передаваемых в фильтр значений

add_filter( 'wp_check_filetype_and_ext', 'filter_function_name_497', 10, 4 );
function filter_function_name_497( $wp_check_filetype_and_ext, $file, $filename, $mimes ){

	/*
	$wp_check_filetype_and_ext

	// когда файл не прошел проверку
	array(
		[ext]  =>
		[type] =>
		[proper_filename] =>
	)

	// для .txt файла
	array(
		[ext]  => txt
		[type] => text/plain
		[proper_filename] =>
	)

	$file     = C:\OpenServer\userdata\temp\phpF581.tmp
	$filename = wp-plugin_043848.svg
	$mimes    = false // список по умолчанию
	*/

	return $wp_check_filetype_and_ext;
}
0

#2 Разрешим загружать SVG файл в WordPress

Пример вынесен в отдельную статью.

Список изменений

С версии 3.0.0 Введена.
С версии 5.1.0 The $real_mime parameter was added.

Где вызывается хук

wp_check_filetype_and_ext()
wp_check_filetype_and_ext
wp-includes/functions.php 3308
return apply_filters( 'wp_check_filetype_and_ext', compact( 'ext', 'type', 'proper_filename' ), $file, $filename, $mimes, $real_mime );

Где используется хук в WordPress

Использование не найдено.