Skip to content

Instantly share code, notes, and snippets.

@christianwach
Created January 9, 2020 14:11
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save christianwach/edebf9cb3cf1b412fb835dff73f09357 to your computer and use it in GitHub Desktop.
Save christianwach/edebf9cb3cf1b412fb835dff73f09357 to your computer and use it in GitHub Desktop.
Populate file info for JSON files so that they can be uploaded to WordPress.
<?php
/**
* Populate file info for JSON files.
*
* @see https://core.trac.wordpress.org/ticket/45633
*
* @param array $info The existing file data array.
* @param string $file Full path to the file.
* @param string $filename The name of the file.
* @param array $mimes Key is the file extension with value as the mime type.
* @param string|bool $real_mime The actual mime type or false if the type cannot be determined.
* @return array $info The modified file data array.
*/
function my_add_json_mime_types( $info, $file, $filename, $mimes, $real_mime ) {
// Get filetype data.
$wp_filetype = wp_check_filetype( $filename, $mimes );
$ext = $wp_filetype['ext'];
$type = $wp_filetype['type'];
// Skip if not JSON.
if ( $ext !== 'json' ) {
return $info;
}
// Use finfo_file if available to validate non-image files.
if ( empty( $real_mime ) AND function_exists( 'finfo_file' ) ) {
$finfo = finfo_open( FILEINFO_MIME_TYPE );
$real_mime = finfo_file( $finfo, $file );
finfo_close( $finfo );
}
// If the extension matches an alternate mime type, let's use it.
if ( in_array( $real_mime, ['application/json', 'text/plain', 'text/html'] ) ) {
$info['ext'] = $ext;
$info['type'] = $type;
}
// --<
return $info;
}
// Add filter for the above.
add_filter( 'wp_check_filetype_and_ext', 'my_add_json_mime_types', 10, 5 );
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment