Upload ảnh với Ajax ngoài Front-end WordPress

/****************************************************************
Project: MySavingWallet
Resource: http://www.ibenic.com/wordpress-file-upload-with-ajax/ 

HTML FORM 
*****************************************************************/

<dt><?php esc_html_e( 'Support Doc', 'listify_child' ); ?></dt>
<dd>
  <section>
      <label for="async-upload" class="input">
          <i class="icon_append fa fa-life-ring"></i>
          <input type="file" id="bank_docs">
          <input type="hidden" name="image_id" class="image_id">
          <p>Please upload a proof of bank account ownership, <br> acceptable forms of verification are voided check, <br> bank letter, or bank statement.</p>
      </label>
  </section>
</dd>
<dd>
  <section>
      <ul id="preview_doc">
      </ul>
  </section>
</dd>
      
      
      
 /****************************************************************
JavaScript / AJAX 
*****************************************************************/

SavingWallet = {};

SavingWallet.prototype.prepareUpload = function (e) {
		e.preventDefault();
		var file = e.target.files;
		var data = new FormData();
		var nonce = $("#_wpnonce").val();
		data.append('action', 'upload_bank_doc');
		//data.append('nonce', local.nonce);
		$.each(file, function(k, v) {
			data.append('upload_bank_doc', v);
		});

    	$.ajax({
    		  url: local.ajax_url,
	          type: 'POST',
	          data: data,
	          cache: false,
	          dataType: 'json',
	          processData: false,
	          contentType: false,
	          success: function(data, textStatus, jqXHR) {	
	          	console.log(data);
              	if( data.response == "SUCCESS" ){
	                var preview = "";
	                if( data.type === "image/jpg" 
	                  || data.type === "image/png" 
	                  || data.type === "image/gif"
	                  || data.type === "image/jpeg"
	                ) {
	                  preview = "<li data-attachment-id='" + data.id + "'><img src='" + data.url + "' /><span class=\"delete_doc\" data-fileurl='" + data.url + "'>x</span></li>";
	                } else {
	                  preview = "<li data-attachment-id='" + data.id + "'><a href='" + data.url + "'>" + data.filename + "</a></li>";
	                }
	  
	                var previewID = $('#preview_doc');
	                previewID.append(preview);
                
                 } else {
                 	$('.add_bank_message').css('color', 'red').text(data.error);
                 }
			}
		})
    };
    
 	var savingwallet = new SavingWallet();
  $('#bank_docs').on('change', savingwallet.prepareUpload);
 
 
/****************************************************************
PHP Processing .... 
*****************************************************************/

function upload_bank_doc_func() {
    $usingUploader = 2;
    $fileErrors = array(
        0 => "There is no error, the file uploaded with success",
        1 => "The uploaded file exceeds the upload_max_files in server settings",
        2 => "The uploaded file exceeds the MAX_FILE_SIZE from html form",
        3 => "The uploaded file uploaded only partially",
        4 => "No file was uploaded",
        6 => "Missing a temporary folder",
        7 => "Failed to write file to disk",
        8 => "A PHP extension stoped file to upload" );
    $posted_data =  isset( $_POST ) ? $_POST : array();
    $file_data = isset( $_FILES ) ? $_FILES : array();
    $data = array_merge( $posted_data, $file_data );
   // check_ajax_referer( 'add_bank_docs_nonce', 'nonce' );
    $response = array();
    if( $usingUploader == 1 ) {
        $uploaded_file = wp_handle_upload( $data['upload_bank_doc'], array( 'test_form' => false ) );
        if( $uploaded_file && ! isset( $uploaded_file['error'] ) ) {
            $response['response'] = "SUCCESS";
            $response['filename'] = basename( $uploaded_file['url'] );
            $response['url'] = $uploaded_file['url'];
            $response['id'] = $uploaded_file['id'];
            $response['type'] = $uploaded_file['type'];
        } else {
            $response['response'] = "ERROR";
            $response['error'] = $uploaded_file['error'];
        }
    } elseif ( $usingUploader == 2) {
        $attachment_id = media_handle_upload( 'upload_bank_doc', 0 );
        
        if ( is_wp_error( $attachment_id ) ) { 
            $response['response'] = "ERROR";
            $response['error'] = $fileErrors[ $data['upload_bank_doc']['error'] ];
        } else {
            $fullsize_path = get_attached_file( $attachment_id );
            $pathinfo = pathinfo( $fullsize_path );
            $url = wp_get_attachment_url( $attachment_id );
            $response['response'] = "SUCCESS";
            $response['filename'] = $pathinfo['filename'];
            $response['id'] = $attachment_id;
            $response['url'] = $url;
            $type = $pathinfo['extension'];
            if( $type == "jpeg"
            || $type == "jpg"
            || $type == "png"
            || $type == "gif" ) {
                $type = "image/" . $type;
            }
            $response['type'] = $type;
        }
    }
    echo json_encode( $response );
    die();
}

add_action("wp_ajax_upload_bank_doc", "upload_bank_doc_func");