Wordpress - Filter for changing MediaElement.js Settings
Copy wp-includes/js/mediaelement/wp-mediaelement.js
into your theme or plugin and make your modifications there. For example, I added some settings to force the use of native video controls on iOS & Android devices, like so:
(function ($) {
// add mime-type aliases to MediaElement plugin support
mejs.plugins.silverlight[0].types.push('video/x-ms-wmv');
mejs.plugins.silverlight[0].types.push('audio/x-ms-wma');
$(function () {
var settings = {
// Put your custom MediaElement.js Player Options here...
alwaysShowControls: true,
// force iPad's native controls
iPadUseNativeControls: true,
// force iPhone's native controls
iPhoneUseNativeControls: true,
// force Android's native controls
AndroidUseNativeControls: true
};
if ( typeof _wpmejsSettings !== 'undefined' )
settings.pluginPath = _wpmejsSettings.pluginPath;
$('.wp-audio-shortcode, .wp-video-shortcode').mediaelementplayer( settings );
});
}(jQuery));
You can then use an action to dequeue the original and enqueue your modified version. If you're doing this in a theme, add the following to your functions.php file:
add_action( 'wp_enqueue_scripts', 'my_mediaelement_settings' );
function my_mediaelement_settings() {
wp_deregister_script( 'wp-mediaelement' );
wp_register_script( 'wp-mediaelement', get_stylesheet_directory_uri() . "/js/wp-mediaelement.js", array( 'mediaelement' ), false, true );
}
This assumes you put your modified wp-mediaelement.js
file inside a js
directory within your theme.
Since WordPress 4.4 there actually is the filter mejs_settings, which does exactly what you want.
In your case:
add_filter('mejs_settings', function ($settings) {
$settings['enableKeyboard'] = true;
return $settings;
});
If anyone is interested, it works like this: wp-includes/script-loader.php
turns this into an inline <script>
in the <head>
that sets a global JS object _wpmejsSettings
, which, on domReady
, is passed to the .mediaelementplayer()
function in wp-includes/js/mediaelement/wp-mediaelement.js
.