私はユーザーがフロントエンドでwp_handle_upload
ファイルをアップロードできるようにするために.csv
を使っています、そしてそれはうまく働きます。 .csv
ファイルだけを許可するようにこれを制限することができるかどうか疑問に思っていましたが、現在それは多種多様なファイルタイプを受け入れます。ドキュメントによると、これは$overrides
パラメータを上書きすることで可能になるはずですが、そうするために何を渡すべきかわからないです。
前もって感謝します!
私がこれを思い付いたソースコードを見て、それを手に入れました:
wp_handle_upload($file_input, array('test_form' => false, 'mimes' => array('csv' => 'text/csv')));
MIMEタイプをオーバーライドするには、配列としてmimes
を渡すだけです。キーはファイル拡張子で、値はMIMEタイプです。
使用するフィルタは 'upload_mimes'です http://xref.yoast.com/trunk/_functions/get_allowed_mime_types.html
関数get_allowed_mime_typesはフィルタ処理された$ mimes配列を取得するので、csvアップロードのみを許可したい場合は次のようにします。
add_filter('upload_mimes', 'javiervd_filter_mime_types');
function javiervd_filter_mime_types($mimes)
{
return array('csv' => 'text/csv');
}
通常、フィルタを使用すると、入力を変更してそれを返すことになりますが、.csvアップロードのみが必要なので、1つの要素を持つ配列を返すことができます。これにより、サイト全体で許可されているアップロードタイプが上書きされることに注意することが重要です。
更新:わかりました、これがあなたができることです。私はユーザーがログアウトしていると仮定しています、そしてそれはこれがcsvsだけが許可されている種類のアップロードであることをテストするための良い方法です。そうでない場合は、いつでもifチェックを変更して、フィルタがフロントエンドのアップロードにのみ適用されるようにすることができます。
add_filter('wp_handle_upload_prefilter' 'javiervd_maybe_filter_mimes');
function javiervd_maybe_filter_mimes($file)
{
//if not logged in, limit uploads to csvs
if(!is_user_logged_in())
{
add_filter('upload_mimes', 'javiervd_filter_mime_types');
//add another filter to remove the mime filter so it only applies for the one function call
add_filter('wp_handle_upload', 'javierd_remove_mime_filter');
}
}
function javiervd_filter_mime_types($mimes)
{
return array('csv' => 'text/csv');
}
function javiervd_remove_mime_filter($upload)
{
remove_filter('upload_mimes', 'javiervd_filter_mime_types');
return $upload;
}