ファイルがアップロードされると、WordPressはそのファイルを調べて、実際のMIMEタイプを見つけます。これはwp_check_filetype_and_ext()
のこの部分から決定されます。
$finfo = finfo_open( FILEINFO_MIME_TYPE );
$real_mime = finfo_file( $finfo, $file );
これは.vtt
ファイルの本当のMIMEタイプがtext/plain
であることを言います。
5.0.1におけるwp_check_filetype_and_ext()
の変更により、MIMEタイプの検証がより厳密になりました。サポートされている場合、$real_mime
で記述されているファイルの実際のMIMEタイプがwp_check_filetype()
の拡張子からのものと一致する必要があります。
5.0.1で.vtt
のアップロードが失敗するのは、実際のMIMEタイプtext/plain
が、サポートされているtext/vtt
ファイル拡張子の.vtt
と同じではないためです。
5.0.1より前では、.vttファイルをアップロードするときのwp_check_filetype_and_ext()
の出力
Array ( [ext] => vtt [type] => text/vtt [proper_filename] => )
5.0.1以降の出力は次のとおりです。
Array ( [ext] => [type] => [proper_filename] => )
wp_check_filetype_and_ext
フィルタを使用すると、Dave Romseyが回答 here で示したように、5.0.1で導入されたロジックをオーバーライドできます。
こちらで報告されているように、同じことが.csv
ファイルでも起こるようです #45615
これはWordPress 5.0.3でvtt
として解決されるはずです。
私はいくつかのデバッグを行い、問題を再現して解決することができましたが、残念ながら特定の原因を理解することができませんでした。一般的に、.vtt
ファイルは wp_check_filetype_and_ext()
によって実行されるチェックに失敗しているようです。
次のコードを含む単純なプラグインを作成した後、.vtt
ファイル(WP 5.0.1でのみテスト)をアップロードできました brasofiloによるこの回答からの適応 :
// Sets the extension and mime type for .vtt files.
add_filter( 'wp_check_filetype_and_ext', 'wpse_file_and_ext', 10, 4 );
function wpse_file_and_ext( $types, $file, $filename, $mimes ) {
if ( false !== strpos( $filename, '.vtt' ) ) {
$types['ext'] = 'vtt';
$types['type'] = 'text/vtt';
}
return $types;
}
また、 .vtt
ファイルはデフォルトで許可されたマイムに既に含まれています WPにより、vtt
を追加する必要はないはずです(実際には必要ありません) upload_mimes
フィルターによって処理されるリストへのMIMEタイプ。例えば。:
add_filter( 'upload_mimes', 'wpse_mime_types');
function wpse_mime_types( $mimes ) {
$mimes['vtt'] = 'text/vtt';
return $mimes;
}
vtt
のエントリが既に存在するためです。
私は単純な デモVTTファイルtest.vtt
という名前を使用し、次の内容を使用しています。
WEBVTT-このファイルにはキューがありません。