{"id":113131,"date":"2019-11-21T20:18:38","date_gmt":"2019-11-21T20:18:38","guid":{"rendered":"https:\/\/wordpress.org\/plugins\/able-player\/"},"modified":"2026-02-07T02:46:31","modified_gmt":"2026-02-07T02:46:31","slug":"ableplayer","status":"publish","type":"plugin","link":"https:\/\/bs.wordpress.org\/plugins\/ableplayer\/","author":1248163,"comment_status":"closed","ping_status":"closed","template":"","meta":{"_crdt_document":"","version":"2.3.0","stable_tag":"2.3.0","tested":"6.9.4","requires":"4.9","requires_php":"7.4","requires_plugins":null,"header_name":"Able Player, accessible HTML5 media player","header_author":"Joe Dolson","header_description":"Accessible HTML5 media player","assets_banners_color":"","last_updated":"2026-02-07 02:46:31","external_support_url":"","external_repository_url":"","donate_link":"https:\/\/www.joedolson.com\/donate\/","header_plugin_uri":"https:\/\/github.com\/ableplayer\/ableplayer-wordpress","header_author_uri":"https:\/\/www.joedolson.com","rating":4.7,"author_block_rating":0,"active_installs":300,"downloads":7595,"num_ratings":3,"support_threads":0,"support_threads_resolved":0,"author_block_count":0,"sections":["description","installation","changelog"],"tags":{"1.0.0":{"tag":"1.0.0","author":"terrillthompson","date":"2023-11-22 17:34:25"},"1.2.0":{"tag":"1.2.0","author":"terrillthompson","date":"2023-11-22 17:34:25"},"1.2.1":{"tag":"1.2.1","author":"joedolson","date":"2025-03-25 14:35:32"},"1.2.2":{"tag":"1.2.2","author":"joedolson","date":"2025-04-24 15:10:57"},"2.0.0":{"tag":"2.0.0","author":"joedolson","date":"2025-06-23 20:47:54"},"2.0.1":{"tag":"2.0.1","author":"joedolson","date":"2025-06-24 15:58:39"},"2.0.2":{"tag":"2.0.2","author":"joedolson","date":"2025-06-28 20:39:49"},"2.1.0":{"tag":"2.1.0","author":"joedolson","date":"2025-07-21 22:27:06"},"2.2.0":{"tag":"2.2.0","author":"joedolson","date":"2025-09-28 18:28:18"},"2.2.1":{"tag":"2.2.1","author":"joedolson","date":"2025-09-30 20:04:32"},"2.3.0":{"tag":"2.3.0","author":"joedolson","date":"2026-02-07 02:46:31"}},"upgrade_notice":[],"ratings":{"1":0,"2":0,"3":0,"4":1,"5":2},"assets_icons":{"icon-128x128.jpg":{"filename":"icon-128x128.jpg","revision":3000310,"resolution":"128x128","location":"assets","locale":""},"icon-256x256.jpg":{"filename":"icon-256x256.jpg","revision":3000310,"resolution":"256x256","location":"assets","locale":""},"icon.svg":{"filename":"icon.svg","revision":3000310,"resolution":false,"location":"assets","locale":false}},"assets_banners":[],"assets_blueprints":{"blueprint.json":{"filename":"blueprint.json","revision":3455732,"resolution":false,"location":"assets","locale":"","contents":"{\"landingPage\":\"\\\/wp-admin\\\/options-general.php?page=ableplayer\",\"preferredVersions\":{\"php\":\"8.2\",\"wp\":\"latest\"},\"phpExtensionBundles\":[\"kitchen-sink\"],\"steps\":[{\"step\":\"login\",\"username\":\"admin\",\"password\":\"password\"},{\"step\":\"installPlugin\",\"options\":{\"activate\":true},\"pluginData\":{\"resource\":\"wordpress.org\\\/plugins\",\"slug\":\"ableplayer\"}},{\"step\":\"setSiteOptions\",\"options\":{\"able_show_playground_intro\":\"true\"}}]}"}},"all_blocks":[],"tagged_versions":["1.0.0","1.2.0","1.2.1","1.2.2","2.0.0","2.0.1","2.0.2","2.1.0","2.2.0","2.2.1","2.3.0"],"block_files":[],"assets_screenshots":{"screenshot-1.png":{"filename":"screenshot-1.png","revision":3369296,"resolution":"1","location":"assets","locale":""},"screenshot-2.png":{"filename":"screenshot-2.png","revision":3369296,"resolution":"2","location":"assets","locale":""}},"screenshots":{"1":"Able Player as an audio player","2":"Able Player as a video player, showing captions and an auto-generated interactive transcript"},"jetpack_post_was_ever_published":false},"plugin_section":[],"plugin_tags":[1953,452,203,84,222],"plugin_category":[34,50],"plugin_contributors":[78144,178869],"plugin_business_model":[],"class_list":["post-113131","plugin","type-plugin","status-publish","hentry","plugin_tags-accessibility","plugin_tags-audio","plugin_tags-html5","plugin_tags-media","plugin_tags-video","plugin_category-accessibility","plugin_category-media","plugin_contributors-joedolson","plugin_contributors-terrillthompson","plugin_committers-joedolson","plugin_committers-martyje","plugin_committers-terrillthompson"],"banners":[],"icons":{"svg":"https:\/\/ps.w.org\/ableplayer\/assets\/icon.svg?rev=3000310","icon":"https:\/\/ps.w.org\/ableplayer\/assets\/icon.svg?rev=3000310","icon_2x":false,"generated":false},"screenshots":[{"src":"https:\/\/ps.w.org\/ableplayer\/assets\/screenshot-1.png?rev=3369296","caption":"Able Player as an audio player"},{"src":"https:\/\/ps.w.org\/ableplayer\/assets\/screenshot-2.png?rev=3369296","caption":"Able Player as a video player, showing captions and an auto-generated interactive transcript"}],"raw_content":"<!--section=description-->\n<p>This plug-in uses Able Player, an open-source fully-accessible cross-browser HTML5 media player, to embed audio or video within your WordPress page.<\/p>\n\n<h3>Instructions for Use<\/h3>\n\n<p>There are currently three ways to add an Able Player instance to a WordPress site:<\/p>\n\n<ol>\n<li>Go to Settings &gt; Able Player &gt; Settings and enable the options to use Able Player for all video, audio, and playlists. Able Player will automatically replace MediaElement.jss or the default WordPress video\/audio blocks with Able Player.<\/li>\n<li>Go to Settings &gt; Able Player &gt; Shortcodes to generate an <code>[ableplayer]<\/code> shortcode.<\/li>\n<li>Enter or paste any valid HTML5 Able Player code into your web page. Full documentation is available on the <a href=\"http:\/\/ableplayer.github.io\/ableplayer\">Able Player<\/a> project page on GitHub.<\/li>\n<\/ol>\n\n<p>Using the media rewriting in option #1, Able Player will replace any <code>audio<\/code> or <code>video<\/code> block. Any tracks added to that block will be automatically handled, giving you support for all the standard Able Player features: captions, navigable transcripts, subtitles, chapters, and audio description.<\/p>\n\n<p>Using option #2, you can create Able Player shortcodes that support most of the basic Able Player features, with support for Vimeo, YouTube, or local video.<\/p>\n\n<p>Option #3 supports the full scope of Able Player features.<\/p>\n\n<h3>The [ableplayer] shortcode<\/h3>\n\n<p>The <code>[ableplayer]<\/code> shortcode supports the following attributes.<\/p>\n\n<h4>Required attributes (one of these)<\/h4>\n\n<ul>\n<li><code>youtube-id<\/code> - 11-character YouTube ID or YouTube URL.<\/li>\n<li><code>vimeo-id<\/code> - Vimeo ID or URL.<\/li>\n<li>`media-id' - An attachment ID for a media file in your WordPress media library or the URL to a hosted video.<\/li>\n<\/ul>\n\n<h4>Additional Player Content<\/h4>\n\n<ul>\n<li><code>captions<\/code> - Attachment ID or URL to <code>.vtt<\/code> captions file. Optional pipe separator for language code and label.<\/li>\n<li><code>subtitles<\/code> - Attachment ID or URL to <code>.vtt<\/code> subtitles file. Optional pipe separator for language code and label.<\/li>\n<li><code>chapters<\/code> - Attachment ID or URL to <code>.vtt<\/code> chapters file. Optional pipe separator for language code and label.<\/li>\n<li><code>descriptions<\/code> - Attachment ID or URL to <code>.vtt<\/code> audio descriptions file. Optional pipe separator for language code and label.<\/li>\n<li><code>youtube-desc-id<\/code> - YouTube URL or ID of a described version of the video<\/li>\n<li><code>youtube-sign-src<\/code> - YouTube URL or ID of a sign language interpreted accompanying video<\/li>\n<li><code>vimeo-desc-id<\/code> - Vimeo URL or ID of a described version of the video<\/li>\n<\/ul>\n\n<p>All captions, subtitles, chapters, and descriptions tracks must be in <code>.vtt<\/code> format. The shortcode only supports a single set of values for each type of data; to add multiple tracks of the same type you can use the Video block or add custom HTML.<\/p>\n\n<p>Either an attachment ID or a URL for your track <code>.vtt<\/code> is required; you can optionally add a language code and a custom label:<\/p>\n\n<pre><code>captions=\"\/path\/to\/file.vtt|es|Espa\u00f1ol\"\n<\/code><\/pre>\n\n<p>By default, the language will be your WordPress installation language, with the labels \"Captions\", \"Subtitles\", \"Chapters\" or \"Audio Description\".<\/p>\n\n<h4>Player Options<\/h4>\n\n<ul>\n<li><code>youtube-nocookie<\/code> - \"true\" or \"false\" (use \"true\" to embed YouTube untracked, for added privacy)<\/li>\n<li><code>autoplay<\/code> - \"true\" or \"false\" (default is \"false\")<\/li>\n<li><code>loop<\/code> - \"true\" or \"false\" (default is \"false\")<\/li>\n<li><code>playsinline<\/code> - \"true\" or \"false\" (default is \"true\"). By setting to \"false\", some devices (e.g., iPhones) will play the video in their own media player rather than in Able Player.<\/li>\n<li><code>hidecontrols<\/code> - \"true\" or \"false\" (default is \"false\"). Set to \"true\" to enable the player controls to fade away during playback. They will appear again if the user hovers over the player or pressing a key, and they are always accessible to screen reader users.<\/li>\n<li><code>poster<\/code> - the URL of a poster image, displayed before the user presses Play<\/li>\n<li><code>width<\/code> - a value in pixels (by default, the player will be sized to fit its container)<\/li>\n<li><code>height<\/code> - a value in pixels (by default, the height of the player will be in proportion to the width)<\/li>\n<li><code>heading<\/code> - The HTML heading level (1-6) of the visually hidden \"Media Player\" heading that precedes the player (for the benefit of screen reader users). If omitted, a heading level will be intelligently assigned based on context.<\/li>\n<li><code>speed<\/code> - \"animals\" or \"arrows\" (default is \"animals\")<\/li>\n<li><code>start<\/code> - start time at which to start playing the media, in seconds. Some browsers do not support this.<\/li>\n<li><code>volume<\/code> - \"0\" to \"10\" (default is \"7\" to avoid overpowering screen reader audio). Some browsers do not support this.<\/li>\n<li><code>seekinterval<\/code> - number of seconds to forward\/rewind with the Forward and Rewind buttons. If omitted, the interval will be intelligently assigned based on length of the video.<\/li>\n<li><code>nowplaying<\/code> - \"true\" or \"false\" to include a \"Selected Track\" section within the media player (default is \"false\").<\/li>\n<li><code>transcript-div<\/code> - ID attribute of a target element that will contain the video transcript<\/li>\n<li><code>id<\/code> - a unique id for the player (if omitted, one will be automatically assigned)<\/li>\n<\/ul>\n\n<h3>Examples<\/h3>\n\n<h4>Example 1<\/h4>\n\n<p>This example uses HTML to add an audio player to the page, with one source (an MP3 file).\n    <code>html\n  &lt;audio id=\"audio1\" preload=\"auto\" data-able-player src=\"path_to_audio.mp3\"&gt;&lt;\/audio&gt;<\/code><\/p>\n\n<h4>Example 2<\/h4>\n\n<p>This example uses HTML to add a video player to the page, with one source (an MP4 file) and four tracks (for captions, descriptions, and chapters in English; and subtitles in Spanish).\n    <code>html\n  &lt;video id=\"able-player-1\" data-able-player preload=\"auto\" poster=\"path_to_image.jpg\"&gt;\n    &lt;source type=\"video\/mp4\" src=\"path_to_video.mp4\"&gt;\n    &lt;track kind=\"captions\" src=\"path_to_captions.vtt\" srclang=\"en\" label=\"English\"&gt;\n    &lt;track kind=\"subtitles\" src=\"path_to_subtitles.vtt\" srclang=\"es\" label=\"Espa\u00f1ol\"&gt;\n    &lt;track kind=\"descriptions\" src=\"path_to_descriptions.vtt\" srclang=\"en\"&gt;\n    &lt;track kind=\"chapters\" src=\"path_to_chapters.vtt\" srclang=\"en\"&gt;\n  &lt;\/video&gt;<\/code><\/p>\n\n<h4>Example 3<\/h4>\n\n<p>This example uses the shortcode to add a video player to the page, with one source (an MP4 file) and four tracks (for captions, descriptions, and chapters in English; and subtitles in Spanish). All sources are fetched as WordPress media attachments.\n    <code>html\n  [ableplayer poster=\"21\" media-id=\"24\" captions=\"25|en|English\" subtitles=\"26|es|Espa\u00f1ol\" descriptions=\"27\" chapters=\"28\"]<\/code><\/p>\n\n<h4>Example 4<\/h4>\n\n<p>This example uses a shortcode to add a YouTube player to the page, with two versions of the video, one with audio description and the other without (the user can toggle between the two versions using the D button).\n    <code>[ableplayer youtube-id=\"XXXXXXXXXXX\" youtube-desc-id=\"YYYYYYYYYYY\"]<\/code><\/p>\n\n<h4>Example 5<\/h4>\n\n<p>This example uses a shortcode to add a Vimeo player to the page, with two versions of the video, one with audio description and the other without (the user can toggle between the two versions using the D button).\n    <code>[ableplayer vimeo-id=\"XXXXXXXXX\" vimeo-desc-id=\"YYYYYYYYY\"]<\/code><\/p>\n\n<p>The Able Player plugin was originally created by <a href=\"https:\/\/terrillthompson.com\">Terrill Thompson<\/a>.<\/p>\n\n<!--section=installation-->\n<ol>\n<li>Upload the unzipped folder <code>ableplayer<\/code> to the <code>\/wp-content\/plugins\/<\/code> directory.<\/li>\n<li>Activate the Able Player plugin through the 'Plugins' menu in WordPress<\/li>\n<li>Follow the Instructions for Use<\/li>\n<\/ol>\n\n<!--section=changelog-->\n<h4>2.3.0<\/h4>\n\n<ul>\n<li>Add Playground previews on .org<\/li>\n<li>Update to <a href=\"https:\/\/github.com\/ableplayer\/ableplayer\/releases\/tag\/v4.8.0\">Able Player v4.8.0<\/a>.<\/li>\n<li>New feature to enable\/disable cookies.<\/li>\n<li>Bug fix: Use history.pushState on tabs change.<\/li>\n<\/ul>\n\n<h4>2.2.1<\/h4>\n\n<ul>\n<li>Bug fix: Speed parameter variable misnamed in JS, so icons always defaulted to arrows.<\/li>\n<li>Bug fix: Minified JS out of date.<\/li>\n<\/ul>\n\n<h4>2.2.0<\/h4>\n\n<ul>\n<li>Update to <a href=\"https:\/\/github.com\/ableplayer\/ableplayer\/releases\/tag\/v4.7.0\">Able Player v4.7.0<\/a>.<\/li>\n<li>Add support for sign language sources from YouTube, new in Able Player 4.7.<\/li>\n<li>Remove <code>data-href<\/code> from allowed attributes in Able Player KSES.<\/li>\n<li>Trim all shortcode attributes of whitespace.<\/li>\n<li>Cast poster attribute to int if is numeric.<\/li>\n<li>Update screenshots.<\/li>\n<\/ul>\n\n<h4>2.1.0<\/h4>\n\n<ul>\n<li>Privacy: Only load Vimeo player.js if used in shortcode or enabled in settings.<\/li>\n<li>Styling: Updates to shipped styling to better avoid layout conflicts.<\/li>\n<li>Bug fix: Invalid comparison set all video types to <code>video\/mp4<\/code>.<\/li>\n<li>Bug fix: Switch to <code>audio<\/code> player if file loaded is audio only.<\/li>\n<li>Bug fix: Address a couple cases where attributes could be unnecessarily added to content.<\/li>\n<li>Change: Load Able Player and video scripts deferred.<\/li>\n<\/ul>\n\n<h4>2.0.2<\/h4>\n\n<ul>\n<li>Bug fix: Default <code>nowplaying<\/code> attribute to empty, rather than false.<\/li>\n<li>Bug fix: Omit skin attribute if empty or 2020.<\/li>\n<li>Bug fix: If video mimetype is <code>video\/quicktime<\/code>, override and set as <code>video\/mp4<\/code>, as some browsers require this.<\/li>\n<\/ul>\n\n<h4>2.0.1<\/h4>\n\n<ul>\n<li>Bug fix: Shortcode generator passed an ID, but required a URL.<\/li>\n<li>Bug fix: Layout issue in description, subtitle, and chapter fields in shortcode generator.<\/li>\n<li>Bug fix: Incorrectly marked up data sources in shortcode rendering.<\/li>\n<\/ul>\n\n<h4>2.0.0<\/h4>\n\n<ul>\n<li>Feature: Settings to enable Able Player to parse <code>video<\/code> and <code>audio<\/code> blocks.<\/li>\n<li>Feature: Settings to enable Able Player to replace MediaElement.js playlists.<\/li>\n<li>Feature: Setting to disable MediaElement.js.<\/li>\n<li>Feature: Settings to configure default behaviors for Able Player.<\/li>\n<li>Feature: Shortcode generation tool to build Able Player shortcodes.<\/li>\n<li>Feature: Support for local video sources in shortcode.<\/li>\n<li>Feature: Support for captions, subtitles, chapters, and audio description tracks in shortcode.<\/li>\n<li>Feature: Automatically enable transcript div for Able Players with appropriate tracks.<\/li>\n<li>Upgrade to Able Player v4.6.0<\/li>\n<\/ul>\n\n<h4>1.2.2<\/h4>\n\n<ul>\n<li>Security: Stored Cross Site Scripting vulnerability in shortcode. Props Peter Thaleikis, reported via WordFence. Also reported by Johska via Patchstack.<\/li>\n<\/ul>\n\n<h4>1.2.1<\/h4>\n\n<ul>\n<li>Change: Updates Able Player to version 4.5.1.<\/li>\n<li>Security: <a href=\"https:\/\/github.com\/ableplayer\/ableplayer\/security\">Upstream security update<\/a> to add DomPurify to Able Player.<\/li>\n<li>API: Makes Able Player with DomPurify as an unincorporated dependency available, switchable using the <code>able_player_js<\/code> filter.<\/li>\n<\/ul>\n\n<h4>1.2.0<\/h4>\n\n<ul>\n<li>Update Able Player to 4.5.0, while retaining 4.4.1 scripts.<\/li>\n<li>Make scripts sensitive to SCRIPT_DEBUG or <code>wp_get_environment_type()<\/code> for easier debugging.<\/li>\n<li>Add unminified versions of CSS.<\/li>\n<li>Add filters to customize JS and CSS urls.<\/li>\n<li>Add filter documentation.<\/li>\n<li>Add DEBUG constant.<\/li>\n<li>Add activation and deactivation routines.<\/li>\n<li>Update to WordPress PHPCS standards.<\/li>\n<li>Add generated documentation of hooks at http:\/\/ableplayer.github.io\/ableplayer-wordpress\/<\/li>\n<\/ul>\n\n<h4>1.1<\/h4>\n\n<ul>\n<li>Update Able Player to 4.4.1<\/li>\n<\/ul>\n\n<h4>1.0<\/h4>\n\n<ul>\n<li>Initial version<\/li>\n<\/ul>","raw_excerpt":"Accessible HTML5 media player","jetpack_sharing_enabled":true,"_links":{"self":[{"href":"https:\/\/bs.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin\/113131","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/bs.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin"}],"about":[{"href":"https:\/\/bs.wordpress.org\/plugins\/wp-json\/wp\/v2\/types\/plugin"}],"replies":[{"embeddable":true,"href":"https:\/\/bs.wordpress.org\/plugins\/wp-json\/wp\/v2\/comments?post=113131"}],"author":[{"embeddable":true,"href":"https:\/\/bs.wordpress.org\/plugins\/wp-json\/wporg\/v1\/users\/joedolson"}],"wp:attachment":[{"href":"https:\/\/bs.wordpress.org\/plugins\/wp-json\/wp\/v2\/media?parent=113131"}],"wp:term":[{"taxonomy":"plugin_section","embeddable":true,"href":"https:\/\/bs.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_section?post=113131"},{"taxonomy":"plugin_tags","embeddable":true,"href":"https:\/\/bs.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_tags?post=113131"},{"taxonomy":"plugin_category","embeddable":true,"href":"https:\/\/bs.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_category?post=113131"},{"taxonomy":"plugin_contributors","embeddable":true,"href":"https:\/\/bs.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_contributors?post=113131"},{"taxonomy":"plugin_business_model","embeddable":true,"href":"https:\/\/bs.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_business_model?post=113131"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}