1

In WordPress 3.6, using the new [audio] shortcode, I can add a player for an .mp3 file like this:

[audio src="http://example.com/audio_files/test.mp3"]

However, if the .mp3 file has capital letters in the extension, it doesn't work:

[audio src="http://example.com/audio_files/test_capital.MP3"]

If I specify the format in the shortcode, it still fails, although in a different way:

[audio mp3="http://example.com/audio_files/test_capital.MP3"]

Looking at function wp_audio_shortcode in "wp-includes/media.php", I can see where this is happening.

Is this intentional behavior for WordPress 3.6? Are there any workarounds (other than renaming the file)? Should I file a bug report?

Followup

This bug has been fixed in the core for WordPress 3.7.

5
  • How are these files uploaded? I've never encountered a situation where WordPress didn't convert the extension to lowercase on upload, making this a non-issue.
    – Milo
    Aug 22, 2013 at 20:44
  • @Milo, interesting point. These would be files uploaded via FTP, or even files on a separate, non-WordPress server. I'll edit the question so it doesn't look like they were uploaded via WordPress.
    – Ben Miller
    Aug 22, 2013 at 20:46
  • 1
    have a look in source at the file extension and mimetype arrays used by the shortcode handler, both should have filters to let you modify them, you may be able to add capitalized versions.
    – Milo
    Aug 22, 2013 at 20:51
  • 1
    seems like a bug to me - filed a report to the WordPress Core trac with a patch for that issue. Aug 25, 2013 at 15:37
  • 1
    Thanks, Mario! For anyone who is curious, here is the ticket.
    – Ben Miller
    Aug 26, 2013 at 4:41

1 Answer 1

4

No, apparently not. Until this behavior is changed in version 3.7 you can add this filter to your theme's functions.php file to include additional extensions.

Edited: I've updated the filter with better code suggested in the comments.

Lower case and uppercase extensions

function my_custom_audio_extensions( $exts ) {
    //merge array of upper case extensions with default array
    return array_merge( $exts, array_map('strtoupper', $exts) );
}
add_filter( 'wp_audio_extensions', 'my_custom_audio_extensions' );

Lower case, upper case, and first letter capitalized extensions

function my_custom_audio_extensions( $exts ) {
    //merge array of lower case defaults, uppercase and first letter capitalized
    return array_merge( $exts, array_map('strtoupper', $exts), array_map('ucfirst', $exts));
}
add_filter( 'wp_audio_extensions', 'my_custom_audio_extensions' );
6
  • 2
    +1. Alternative way is function my_custom_audio_extensions( $exts ) { return array_merge( $exts, array_map('strtoupper', $exts) ); } is more future proof :)
    – gmazzap
    Aug 28, 2013 at 0:02
  • Yes, Brilliant! We don't need to add extensions for additional format types, we just need to allow capital extensions. I'll revise my answer.
    – epilektric
    Aug 28, 2013 at 0:13
  • Thanks. This will allow extensions in all caps to work (.MP3), but if your extension is mixed case (.Mp3), it still won't work. And if you want to make the same change to video files, you'll need another filter. The fix in WordPress 3.7 affects both the audio and video shortcodes and allows mixed-case extensions. But this is a great workaround solution until then.
    – Ben Miller
    Aug 28, 2013 at 3:44
  • @BenMiller Yes, this solution is all caps only. My previous version was a little less dummy-proof but you could specify mixed case extensions if you wanted. This was the code array_push( $exts, 'MP3', 'OGG', 'WMA', 'M4A', 'WAV' ); return $exts;
    – epilektric
    Aug 28, 2013 at 4:21
  • 1
    @BenMiller if you want you can append also extension with only the 1st capital letter: return array_merge( $exts, array_map('strtoupper', $exts), array_map('ucfirst', $exts))
    – gmazzap
    Aug 29, 2013 at 11:00

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Not the answer you're looking for? Browse other questions tagged or ask your own question.