apply_filters( ‘wp_check_filetype_and_ext’, array $wp_check_filetype_and_ext, string $file, string $filename, string[]|null $mimes, string|false $real_mime )

Filters the “real” file type of the given file.

Parameters

$wp_check_filetype_and_extarray
Values for the extension, mime type, and corrected filename.
  • ext string|false
    File extension, or false if the file doesn’t match a mime type.
  • type string|false
    File mime type, or false if the file doesn’t match a mime type.
  • proper_filename string|false
    File name with its correct extension, or false if it cannot be determined.
$filestring
Full path to the file.
$filenamestring
The name of the file (may differ from $file due to $file being in a tmp directory).
$mimesstring[]|null
Array of mime types keyed by their file extension regex, or null if none were provided.
$real_mimestring|false
The actual mime type or false if the type cannot be determined.

Source

return apply_filters( 'wp_check_filetype_and_ext', compact( 'ext', 'type', 'proper_filename' ), $file, $filename, $mimes, $real_mime );

Changelog

VersionDescription
5.1.0The $real_mime parameter was added.
3.0.0Introduced.

User Contributed Notes

  1. Skip to note 2 content

    You will want to use this filter as the function finfo_file from PHP doesn’t always detect CSV files as text/plain or text/csv, instead it is tagged as application/octet-stream.

    This creates a problem since WordPress will not allow you to upload the file to the library or even WooCommerce import and therefore you can use the filter as follows.

    The following code will help avoid using ALLOW_UNFILTERED_UPLOADS when all you need to enable is one file type.

    add_filter( 'wp_check_filetype_and_ext', function ( $data, $file, $filename ) {
      // Get the extension of the uploaded file
      $ext = pathinfo( $filename, PATHINFO_EXTENSION );
    
      // Check if the file extension is CSV
      if ( 'csv' === $ext ) {
          $data[‘ext’]  = 'csv';
          $data[‘type’] = 'text/csv';
      }
    
      return $data;
    }, 10, 3 );

You must log in before being able to contribute a note or feedback.