web-dev-qa-db-ja.com

wordpress 5.0.1でファイル.vttをアップロードできません

私は自分のサイトをwordpress 5.0.1に更新しましたが、今はもうファイル.vttをアップロードすることはできません。この機能はワードプレス4.9.8で正しく動作します

enter image description here 

4
Prast

ファイルがアップロードされると、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として解決されるはずです。

3
birgire

私はいくつかのデバッグを行い、問題を再現して解決することができましたが、残念ながら特定の原因を理解することができませんでした。一般的に、.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-このファイルにはキューがありません。

2
Dave Romsey