web-dev-qa-db-ja.com

Wp_handle_uploadでファイルタイプを設定する方法

私はユーザーがフロントエンドでwp_handle_uploadファイルをアップロードできるようにするために.csvを使っています、そしてそれはうまく働きます。 .csvファイルだけを許可するようにこれを制限することができるかどうか疑問に思っていましたが、現在それは多種多様なファイルタイプを受け入れます。ドキュメントによると、これは$overridesパラメータを上書きすることで可能になるはずですが、そうするために何を渡すべきかわからないです。

前もって感謝します!

3

私がこれを思い付いたソースコードを見て、それを手に入れました:

wp_handle_upload($file_input, array('test_form' => false, 'mimes' => array('csv' => 'text/csv')));

MIMEタイプをオーバーライドするには、配列としてmimesを渡すだけです。キーはファイル拡張子で、値はMIMEタイプです。

8

使用するフィルタは '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;
}  
1
brandwaffle