{"id":383691,"date":"2026-10-24T14:47:22","date_gmt":"2026-10-24T14:47:22","guid":{"rendered":"https:\/\/wordpress.org\/plugins\/trueplayer\/"},"modified":"2026-10-24T14:47:06","modified_gmt":"2026-10-24T14:47:06","slug":"trueplayer","status":"publish","type":"plugin","link":"https:\/\/wordpress.org\/plugins\/trueplayer\/","author":20964119,"comment_status":"closed","ping_status":"closed","template":"","meta":{"version":"1.7.4","stable_tag":"1.7.4","tested":"7.1.3","requires":"6.4","requires_php":"7.4","requires_plugins":null,"header_name":"TruePlayer","header_author":"Kodezen","header_description":"A watch-verified, quiz-gated video & audio player for WordPress \u2014 knows whether a viewer actually watched, locks the video on quiz failure, and fires webhooks for automation.","assets_banners_color":"8aacea","last_updated":"2026-10-24 14:47:06","external_support_url":"","external_repository_url":"","donate_link":"","header_plugin_uri":"https:\/\/true-player.net\/","header_author_uri":"https:\/\/kodezen.com","rating":5,"author_block_rating":0,"active_installs":0,"downloads":67,"num_ratings":1,"support_threads":1,"support_threads_resolved":0,"author_block_count":0,"sections":["description","changelog"],"tags":{"1.7.4":{"tag":"1.7.4","author":"kodezen","date":"2026-10-24 14:47:06","revision":3763403}},"upgrade_notice":[],"ratings":{"1":0,"2":0,"3":0,"4":0,"5":1},"assets_icons":{"icon-256x256.png":{"filename":"icon-256x256.png","revision":3765027,"resolution":"256x256","location":"assets","locale":"","width":256,"height":256}},"assets_banners":{"banner-1544x500.png":{"filename":"banner-1544x500.png","revision":3765027,"resolution":"1544x500","location":"assets","locale":"","width":1544,"height":500},"banner-772x250.png":{"filename":"banner-772x250.png","revision":3765027,"resolution":"772x250","location":"assets","locale":"","width":772,"height":250}},"assets_blueprints":{},"all_blocks":{"trueplayer\/player":{"name":"trueplayer\/player","title":"Player"}},"tagged_versions":["1.7.4"],"block_files":[],"assets_screenshots":[],"screenshots":[]},"plugin_section":[],"plugin_tags":[452,127055,444,220,222],"plugin_category":[50],"plugin_contributors":[223170],"plugin_business_model":[],"class_list":["post-383691","plugin","type-plugin","status-publish","hentry","plugin_tags-audio","plugin_tags-hls","plugin_tags-player","plugin_tags-playlist","plugin_tags-video","plugin_category-media","plugin_contributors-kodezen","plugin_committers-kodezen"],"banners":{"banner":"https:\/\/ps.w.org\/trueplayer\/assets\/banner-772x250.png?rev=3765027","banner_2x":"https:\/\/ps.w.org\/trueplayer\/assets\/banner-1544x500.png?rev=3765027","banner_rtl":false,"banner_2x_rtl":false},"icons":{"svg":false,"icon":"https:\/\/ps.w.org\/trueplayer\/assets\/icon-256x256.png?rev=3765027","icon_2x":"https:\/\/ps.w.org\/trueplayer\/assets\/icon-256x256.png?rev=3765027","generated":false},"screenshots":[],"raw_content":"<!--section=description-->\n<p>TruePlayer is a native WordPress video and audio player with its own controls, so every video on your site looks and behaves the same \u2014 wherever it is hosted.<\/p>\n\n<ul>\n<li><strong>Sources<\/strong> \u2014 self-hosted files from the media library, any MP4\/WebM URL, HLS streams (.m3u8), YouTube and Vimeo.<\/li>\n<li><strong>Audio player<\/strong> \u2014 a proper audio bar with cover art, waveform and compact\/card\/minimal layouts.<\/li>\n<li><strong>Your look<\/strong> \u2014 skins, accent and hover colors, play-button styles, control-bar styles, roundness, aspect ratio, logo watermark, and a site-wide default that every video inherits.<\/li>\n<li><strong>Controls<\/strong> \u2014 choose exactly which buttons show; speed, quality, captions, picture-in-picture, keyboard shortcuts, rewind\/forward and download.<\/li>\n<li><strong>Chapters &amp; captions<\/strong> \u2014 YouTube-style segmented chapters, multi-track subtitles with styling, and a transcript drawer.<\/li>\n<li><strong>Behaviour<\/strong> \u2014 autoplay modes, loop, resume where the viewer left off, sticky player on scroll, no-skip, click-to-load poster for fast pages.<\/li>\n<li><strong>Engagement<\/strong> \u2014 call-to-action and end-screen overlays, text overlays, an action bar, and email-capture forms (sent to your inbox).<\/li>\n<li><strong>Playlists &amp; presets<\/strong> \u2014 sidebar or grid playlists with autoplay-next, and reusable player presets.<\/li>\n<li><strong>Block &amp; shortcode<\/strong> \u2014 a block with an in-editor preview, plus <code>[trueplayer id=\"\u2026\"]<\/code>, a popup\/lightbox shortcode and playlist shortcode.<\/li>\n<li><strong>SEO<\/strong> \u2014 VideoObject structured data and Google Analytics (GA4) playback events.<\/li>\n<\/ul>\n\n<p>Everything in this plugin works on its own. A separate add-on, TruePlayer Pro, adds features of its own such as watch verification, quizzes, analytics and automation.<\/p>\n\n<h3>External services<\/h3>\n\n<p>TruePlayer connects to the following third-party services. Each one is only contacted for the feature it supports, and only when that feature is used.<\/p>\n\n<ul>\n<li><strong>Vimeo oEmbed<\/strong> (<code>https:\/\/vimeo.com\/api\/oembed.json<\/code>) \u2014 used to resolve a thumbnail for a Vimeo video when none is set, so the poster image is populated. The video's public Vimeo URL is sent. Called in the admin only, when saving a Vimeo-sourced video. Terms: https:\/\/vimeo.com\/terms \u2014 Privacy: https:\/\/vimeo.com\/privacy<\/li>\n<li><strong>YouTube captions<\/strong> (<code>https:\/\/www.youtube.com\/api\/timedtext<\/code>) \u2014 used by the subtitles importer to fetch public captions for a YouTube video when an administrator imports them. Only the public video id is sent. Terms: https:\/\/www.youtube.com\/t\/terms \u2014 Privacy: https:\/\/policies.google.com\/privacy<\/li>\n<li><strong>Google Analytics (GA4) via Google Tag Manager<\/strong> (<code>https:\/\/www.googletagmanager.com\/gtag\/js<\/code>) \u2014 only loaded when the site administrator turns on Google Analytics in TruePlayer's Settings \u2192 Integrations screen and enters a GA4 Measurement ID. Standard GA4 playback events are then sent from the viewer's browser to Google. Off by default. Terms: https:\/\/marketingplatform.google.com\/about\/analytics\/terms\/us\/ \u2014 Privacy: https:\/\/policies.google.com\/privacy<\/li>\n<li><strong>Kodezen usage insights<\/strong> (<code>https:\/\/store.kodezen.com\/<\/code>) \u2014 optional, anonymous usage telemetry sent only if a site administrator opts in from the notice TruePlayer shows in the admin; it sends the site URL, WordPress\/PHP\/plugin versions and the admin email given at opt-in. When the plugin is deactivated, an optional feedback form can send the reason the administrator chooses. Nothing is sent without that action. Terms: https:\/\/kodezen.com\/terms-and-conditions\/ \u2014 Privacy: https:\/\/store.kodezen.com\/privacy-policy\/<\/li>\n<\/ul>\n\n<h3>Third-Party Libraries<\/h3>\n\n<p>TruePlayer bundles the following open-source libraries. Each one keeps its own license and copyright.<\/p>\n\n<ul>\n<li><strong>StoreEngine WordPress SDK<\/strong> \u2014 the opt-in usage-insights client described above. Source: https:\/\/github.com\/imrantushar\/storeengine-sdk-for-wordpress \u2014 License: GPL-2.0-or-later (\u00a9 Kodezen). Installed via Composer under <code>vendor\/storeengine\/wordpress-sdk\/<\/code>.<\/li>\n<\/ul>\n\n<h3>Source code &amp; build<\/h3>\n\n<p>All compiled JavaScript and CSS in <code>assets\/build\/<\/code> is generated from the human-readable sources shipped in the <code>dev_trueplayer\/<\/code> folder of this plugin. The same sources are public at https:\/\/github.com\/imrantushar\/trueplayer .<\/p>\n\n<p>Every file in <code>assets\/build\/<\/code> maps to a source entry:<\/p>\n\n<ul>\n<li><code>backend.*.js<\/code> \/ <code>style-backend.css<\/code> \u2014 <code>dev_trueplayer\/backend.js<\/code> (admin app, <code>dev_trueplayer\/admin\/<\/code>)<\/li>\n<li><code>frontend.*.js<\/code> \/ <code>style-frontend.css<\/code> \u2014 <code>dev_trueplayer\/frontend.js<\/code> (player, <code>dev_trueplayer\/player\/<\/code>)<\/li>\n<li><code>block.*.js<\/code> \u2014 <code>dev_trueplayer\/block\/index.js<\/code> (block editor)<\/li>\n<li><code>yt.*.js<\/code>, <code>vimeo.*.js<\/code> \u2014 lazily loaded provider chunks from <code>dev_trueplayer\/player\/providers\/<\/code><\/li>\n<li><code>hlsjs.*.js<\/code>, <code>vimeojs.*.js<\/code> \u2014 the third-party hls.js (https:\/\/github.com\/video-dev\/hls.js, Apache-2.0) and @vimeo\/player (https:\/\/github.com\/vimeo\/player.js, MIT) npm packages, split into their own chunks<\/li>\n<\/ul>\n\n<p>To rebuild: install Node.js 20+, then run <code>npm install<\/code> and <code>npm run build<\/code> in the plugin folder. The build uses <code>@wordpress\/scripts<\/code> (webpack) with the config in <code>webpack.config.js<\/code>.<\/p>\n\n<!--section=changelog-->\n<h4>1.7.4 - 24-10-2026<\/h4>\n\n<ul>\n<li>Changed - Removed the unused progress, quiz-attempts, engagement and daily tables from the free plugin; they are no longer created on activation, and uninstall cleanup was updated to match.<\/li>\n<\/ul>\n\n<h4>1.7.3 - 17-10-2026<\/h4>\n\n<ul>\n<li>Security: Colour settings (accent and other colour fields) are now strictly validated on save and at render time.<\/li>\n<\/ul>\n\n<h4>1.7.2 - 14-10-2026<\/h4>\n\n<ul>\n<li>Security - Public opt-in REST endpoint (<code>\/wp-json\/trueplayer\/v1\/optin<\/code>) now requires a <code>wp_rest<\/code> nonce, applies a per-IP+video rate limit, and includes a honeypot field to block form-walking bots.<\/li>\n<li>Changed - Admin screens no longer remove queued <code>admin_notices<\/code> callbacks; a CSS-only suppression keeps the layout clean while leaving other plugins' notices in the DOM.<\/li>\n<li>Changed - Admin asset enqueue now matches TruePlayer's own page hooks exactly instead of a substring on the plugin slug.<\/li>\n<li>Changed - YouTube caption importer sends an honest <code>TruePlayer\/&lt;version&gt;; &lt;site_url&gt;<\/code> User-Agent instead of a browser-spoofing one.<\/li>\n<li>Added - <code>uninstall.php<\/code> drops this plugin's custom tables, options, transients and generated poster attachments when the site owner deletes the plugin. Honours a <code>trueplayer_keep_data_on_uninstall<\/code> option, and runs per-site on multisite.<\/li>\n<li>Changed - Readme tags no longer use third-party brand names.<\/li>\n<\/ul>\n\n<h4>1.7.1 - 14-10-2026<\/h4>\n\n<ul>\n<li>Fixed - Activation schema no longer uses <code>JSON<\/code> columns or <code>DATETIME DEFAULT CURRENT_TIMESTAMP<\/code>, so tables create cleanly on MySQL versions WordPress still supports.<\/li>\n<li>Fixed - Schema sync now verifies every expected table exists before recording the database version, so a silent <code>dbDelta<\/code> failure can no longer mark the install as upgraded.<\/li>\n<li>Fixed - Seed data and preset-preview samples no longer reference remote demo files; sources start empty and the author picks their own media.<\/li>\n<li>Security - The video-preview REST route now requires edit rights on the specific video, not just a generic edit-posts capability.<\/li>\n<li>Changed - Vimeo poster transient is now namespaced as <code>trueplayer_vimeo_poster_<\/code> to avoid colliding with other plugins' short prefixes.<\/li>\n<\/ul>\n\n<h4>1.7.0 - 11-10-2026<\/h4>\n\n<ul>\n<li>Changed - Everything in the free plugin now works on its own, with no locked options. Features that belong to TruePlayer Pro now ship only in that add-on.<\/li>\n<li>Changed - HLS streams, Google Analytics events and YouTube caption import are free.<\/li>\n<li>Removed - Interactive (H5P) content moved to TruePlayer Pro.<\/li>\n<li>Removed - Custom CSS fields \u2014 use the Customizer or Site Editor's Additional CSS instead.<\/li>\n<li>Security - Quick-editing a video from the block editor now also checks you can edit that video.<\/li>\n<li>Changed - Player settings are passed to the page as data attributes instead of inline script tags; admin styles load through the WordPress style queue.<\/li>\n<li>Changed - Updated the StoreEngine SDK to 1.6.2.<\/li>\n<li>Added - Readme documents where the source for the compiled scripts lives and how to rebuild it.<\/li>\n<\/ul>\n\n<h4>1.6.1 - 10-10-2026<\/h4>\n\n<ul>\n<li>Security - Harden inline player config against breakout \u2014 JSON blobs rendered beside the player, popup and playlist now escape <code>&lt;\/script&gt;<\/code> sequences.<\/li>\n<li>Changed - Plugin URI updated to https:\/\/true-player.net\/.<\/li>\n<li>Changed - Rename post types and taxonomy to plugin-prefixed slugs (<code>truepl_video<\/code>, <code>truepl_preset<\/code>, <code>truepl_video_tag<\/code>, <code>truepl_playlist<\/code>) to avoid collisions. Existing content is migrated automatically on first admin load.<\/li>\n<li>Changed - Admin-area white-labeling no longer touches player attribution (the player carries none to suppress).<\/li>\n<li>Added - Readme now documents every external service the plugin can contact, with Terms and Privacy links.<\/li>\n<\/ul>\n\n<h4>1.6.0 - 24-09-2026<\/h4>\n\n<ul>\n<li>Added - Quality selector: Auto plus every available level, in the gear menu or as a one-tap button. Bunny Stream, Mux, Gumlet ABR, HLS, YouTube and Vimeo.<\/li>\n<li>Added - The viewer's quality choice is remembered across videos.<\/li>\n<li>Added - Rapid Engage Bar: a simulated seek bar that runs ahead early so a video feels shorter. Needs Pro.<\/li>\n<li>Added - Seek bar is now its own section in the player editor.<\/li>\n<li>Added - Waveform is selectable as a video seek bar style, not only for audio.<\/li>\n<li><p>Added - Separate Rapid Engage speeds for desktop and mobile.<\/p><\/li>\n<li><p>Fixed - The volume slider's indicator sat above its track instead of on it.<\/p><\/li>\n<li>Fixed - Firefox drew the volume fill thicker than the track it was filling.<\/li>\n<li>Fixed - The volume slider could be squashed by a host theme's input styles.<\/li>\n<\/ul>\n\n<h4>1.5.0 - 14-09-2026<\/h4>\n\n<ul>\n<li>Added - Two more audio starting points: Audiobook and Playlist.<\/li>\n<li>Added - Podcast and Audiobook are now audio bars of their own, not just switched-on controls. Need Pro.<\/li>\n<li>Added - Video and Audio filters in the media library.<\/li>\n<li>Added - The create dialog names the look a new item will use.<\/li>\n<li>Added - \"Start from a template\" in the preset builder \u2014 a whole look in one click.<\/li>\n<li>Added - The site-wide default look is now set separately for video and audio.<\/li>\n<li><p>Added - A short description on every template tile, on hover or keyboard focus.<\/p><\/li>\n<li><p>Fixed - A site-wide video template pushed its skin and aspect ratio onto audio items.<\/p><\/li>\n<li>Fixed - Choosing a template added to the saved look instead of replacing it.<\/li>\n<li>Fixed - A site-wide default preset never showed in the editor preview.<\/li>\n<li>Fixed - Saving Settings did not refresh the audio defaults until the page was reloaded.<\/li>\n<li>Fixed - A default preset overrode the template tiles with nothing on screen to say so.<\/li>\n<li>Fixed - Template tiles showed a PRO badge even with TruePlayer Pro active.<\/li>\n<li>Fixed - Audio items offered \"Generate from video\" for cover art, which could only fail.<\/li>\n<li>Fixed - The unsaved-changes dialog opened at full width for a single sentence.<\/li>\n<li><p>Fixed - The Minimal audio bar and the Simple video skin looked alike in the picker.<\/p><\/li>\n<li><p>Security - Videos inside a playlist skipped the free-plan clamp, leaking premium source URLs into the page.<\/p><\/li>\n<li>Security - A video title containing markup could break out of the SEO data block and run script.<\/li>\n<li><p>Security - Hardened the importer, an interactive-engine query, and imported caption parsing.<\/p><\/li>\n<li><p>Changed - Template tiles redesigned: light preview, and a brand-blue tick on the chosen one.<\/p><\/li>\n<li>Changed - The audio bar's shape is now called \"Skin\", the same as video.<\/li>\n<li>Changed - Free starting points sit above the Pro ones, which are grouped and labelled.<\/li>\n<li>Changed - The default audio look is Minimal, so a fresh install starts on something it can use.<\/li>\n<li>Changed - The default aspect ratio setting now says it never reaches an audio item.<\/li>\n<\/ul>\n\n<h4>1.4.0 - 10-09-2026<\/h4>\n\n<ul>\n<li>Added - Audio as its own media type \u2014 Video \/ Audio tabs when creating media.<\/li>\n<li>Added - Three audio layouts: compact bar, card, and minimal.<\/li>\n<li>Added - Audio presets, separate from video ones, with Podcast, Album and Bare starting points.<\/li>\n<li>Added - Audio control toggles: previous \/ next track, playback speed, chapters &amp; transcript.<\/li>\n<li>Added - Previous \/ next track buttons in playlists.<\/li>\n<li>Added - Automatic audio detection from the file extension, so imported and pasted audio needs no re-saving.<\/li>\n<li>Added - Site-wide default presets for video and audio, under Settings \u2192 General.<\/li>\n<li>Added - A \"When attempts run out\" policy \u2014 lock and require a re-watch, or never lock. Overridable per video.<\/li>\n<li><p>Added - Audio wording and icons in Bunny.net Storage and Gumlet uploads.<\/p><\/li>\n<li><p>Fixed - Re-watching after using every quiz attempt gave only one attempt instead of a fresh set.<\/p><\/li>\n<li>Fixed - A checkpoint before the completion threshold could lock a re-watching viewer out for good.<\/li>\n<li>Fixed - Audio items previewed as a video player in the editor.<\/li>\n<li>Fixed - The minimal audio layout rendered as an empty white box on light backgrounds.<\/li>\n<li>Fixed - Audio was published to search engines as video.<\/li>\n<li>Fixed - The audio preset's \"Preview with\" row did not line up with the preview below it.<\/li>\n<li><p>Fixed - Fields took their border from WordPress instead of the plugin.<\/p><\/li>\n<li><p>Changed - Player controls are defined in one place, so the editor and player can't drift apart.<\/p><\/li>\n<li>Changed - The editor hides settings that cannot apply to audio.<\/li>\n<li>Changed - The Interactive tab is always shown, with a teaser when the addon is off.<\/li>\n<li>Changed - All dialogs open at the same width.<\/li>\n<\/ul>\n\n<h4>1.3.0 - 06-09-2026<\/h4>\n\n<ul>\n<li>Added - Gumlet as a video source \u2014 upload a file from the editor, or use one already in your Gumlet workspace. Needs Pro.<\/li>\n<li>Added - Uploads go straight from the browser to Gumlet, with drag &amp; drop, progress and cancel. PHP's upload size limit no longer applies, and your API key never leaves the server.<\/li>\n<li>Added - Gumlet settings under Settings \u2192 Sources &amp; CDN, with your workspaces offered as a list.<\/li>\n<li>Added - Signed, expiring links for Gumlet videos marked private.<\/li>\n<li><p>Added - A video saved while Gumlet is still encoding starts playing on its own when encoding finishes.<\/p><\/li>\n<li><p>Fixed - Premium sources leaked their real media URL into the page on free installs. The location is now stripped on the server.<\/p><\/li>\n<li>Fixed - Bunny.net Storage videos could not be marked private, played on free installs despite being premium, and showed a raw \"bunnyStorage\" badge.<\/li>\n<li>Fixed - HLS video failed to play in Chrome \u2014 the player trusted Chrome's claim that it supports HLS and skipped hls.js.<\/li>\n<li>Fixed - Playback failures said only \"Playback error\". They now name the cause.<\/li>\n<\/ul>\n\n<h4>1.2.0 - 03-09-2026<\/h4>\n\n<ul>\n<li>Added - Direct Bunny.net Storage uploads from the editor with drag &amp; drop, picker, progress bar, and cancel support.<\/li>\n<li>Added - Bunny.net Storage file browser to reuse existing uploads.<\/li>\n<li>Added - Bunny.net Storage credentials under Settings \u2192 Sources &amp; CDN.<\/li>\n<li>Added - 4 MB chunked uploads for large files.<\/li>\n<li>Added - Post-upload URL verification with playback error details.<\/li>\n<li>Added - Collapsible Bunny.net settings sections with status badges.<\/li>\n<li>Added - Bunny.net Storage as a source in the Create Media dialog.<\/li>\n<li>Added - QuizPress quiz as an alternative question source for checkpoints and the final quiz.<\/li>\n<li>Added - Inline QuizPress quiz-taking UI, question-by-question, using QuizPress's own answer widgets and grading.<\/li>\n<li>Added - Real pass\/fail and score read from QuizPress's own attempt data.<\/li>\n<li>Added - A no-penalty \"awaiting manual review\" outcome for QuizPress quizzes with manually-reviewed questions.<\/li>\n<li>Added - QuizPress passing grade, attempt limit, and manual-review warnings shown in the Gating tab.<\/li>\n<li>Added - Live-preview grading for QuizPress-sourced quizzes.<\/li>\n<li>Added - \"Try again\" after a failed QuizPress-sourced checkpoint.<\/li>\n<li>Added - Drag-and-drop reordering and a collapsible accordion for checkpoint and question lists.<\/li>\n<li>Added - The editor's active tab now stays in the URL, so a reload keeps your place.<\/li>\n<li><p>Added - A \"What's New\" panel in the admin top bar.<\/p><\/li>\n<li><p>Fixed - Bunny.net Storage Private mode not applying token protection.<\/p><\/li>\n<li>Fixed - Bunny.net token signing for single files and HLS directories.<\/li>\n<li>Fixed - Single-file tokens potentially unlocking an entire folder.<\/li>\n<li>Fixed - The standalone video page to provide a clean, shareable URL.<\/li>\n<li>Fixed - The frontend volume slider stretching to fill the control bar on some themes.<\/li>\n<li>Fixed - The settings\/speed menu not closing on an outside click.<\/li>\n<li>Fixed - Arrow key volume\/seek shortcuts also scrolling the page.<\/li>\n<\/ul>\n\n<h4>1.1.0 - 01-09-2026<\/h4>\n\n<ul>\n<li>Fixed - Saving a video, preset or playlist whose settings contained a double quote or a backslash wiped the whole configuration, source and layers included. Adding a shortcode layer was the easiest way to hit it.<\/li>\n<li>Fixed - Aspect ratio \"Auto (native)\" rendered an invisible<\/li>\n<li>Fixed - Caption background colour and background opacity had no effect during playback.<\/li>\n<li>Fixed - Loop stopped the end of a video ever being reached, <\/li>\n<li>Fixed - silently disabling the final quiz, end screen, end email gate, reset-on-end and playlist auto-advance.<\/li>\n<li>Fixed - \"Disable the timeline entirely\" left the arrow keys and the rewind and fast-forward buttons still able to seek.<\/li>\n<li>Fixed - \"Start muted\" was ignored on YouTube and Vimeo sources.<\/li>\n<li>Fixed - The editor preview shared its saved playback position with the front end, so it could open part-way through a video.<\/li>\n<li>Fixed - A caption track marked as default reported itself as off while it was being displayed.<\/li>\n<li>Fixed - Playback failures gave no reason. A YouTube video that disallows embedding is now named as such.<\/li>\n<li>Fixed - Discarding a preset or playlist edit left the discarded changes on screen.<\/li>\n<li>Fixed - Video control, audio playback, source type and interactive email form issues reported during testing.<\/li>\n<li>Improved - Removing a video now also removes the poster that came from it, instead of leaving it in the media library.<\/li>\n<li>Improved - Video titles are reduced to plain single-line text and capped in length<\/li>\n<li>Improved - The control bar now appears as soon as the media is ready, not only after playback starts.<\/li>\n<li>Improved - Layer timings are entered as hours, minutes and seconds instead of raw seconds, and layer rows read as timestamps.<\/li>\n<li>Improved - The editor's eye toggle now genuinely previews a layer, ignoring its time window and taking it down again afterwards.<\/li>\n<li>Improved - Settings the preview cannot demonstrate now say so, and \"Reset to start when finished\" is disabled while Loop is on.<\/li>\n<li>Improved - Shortcode layers show a placeholder in the editor preview instead of appearing empty, and their inline scripts now run.<\/li>\n<li>Improved - Self-hosted video workflow, audio player styling, H5P media options and admin submenu presentation.<\/li>\n<li>Added - Email capture now works with no CRM connected: a built-in Email notification provider mails each capture to the site administrator.<\/li>\n<li>Added - An Email form layer with two modes, gate (pauses the video) and inline (does not interrupt). The old Email capture section merged into it and is converted on upgrade.<\/li>\n<li>Added - Conditional display rules on layers: logged in, CRM contact, tag or list, URL parameter, or having seen or completed another layer.<\/li>\n<li>Added - A poster field and media file card in the Source step, so a file and its poster are managed together.<\/li>\n<li>Added - Player preset templates in Settings, with presets resolved in the live preview.<\/li>\n<li>Added - A trueplayer:layer-rendered DOM event, so code that initialises at page load can pick up layers added mid-playback.<\/li>\n<\/ul>\n\n<h4>1.0.0 - 27\/08\/2026<\/h4>\n\n<p>First stable release. TruePlayer ships as a native WordPress video &amp; audio player built for enforcement and automation.<\/p>\n\n<p><strong>Player<\/strong>\n* Native React player with multiple skins (default, modern, simple, minimal, standard).\n* Sources: self-hosted \/ direct URL, HLS, audio, YouTube and Vimeo.\n* Full customization: control toggles, autoplay\/loop\/save-position\/sticky-float, preload &amp; load strategy (facade\/eager\/on-visible), accent color, play-button style, roundness, control-bar style, aspect ratio, caption size\/color\/background, playback speeds, Picture-in-Picture.\n* Optional bundled H5P interactive engine (import + render H5P content, xAPI fed into the event pipeline).<\/p>\n\n<p><strong>Watch verification<\/strong>\n* Server-authoritative coverage tracking proves a viewer genuinely watched (whole-second progress only), with anti-skip \/ seek-jump and playback-rate guards.<\/p>\n\n<p><strong>Quiz gating<\/strong>\n* Checkpoint and end-gate questions attached to a video; server-side grading (answers never sent to the client). Failing locks the video and resets coverage until the viewer re-watches and re-attempts. (Enforcement activates with TruePlayer Pro.)<\/p>\n\n<p><strong>Events &amp; webhooks<\/strong>\n* Event bus: view.started, progress.milestone, view.completed, checkpoint.passed\/failed, quiz.passed\/failed, video.locked\/unlocked, subscriber.added.\n* HMAC-SHA256 signed JSON webhooks (X-TruePlayer-Signature header) for automation tools.<\/p>\n\n<p><strong>Admin<\/strong>\n* React single-page admin: Dashboard, Media library, Editor, Playlists, Presets, Settings.\n* WP-CLI <code>trueplayer<\/code> command; REST API across videos, progress, grading, playlists, presets, subtitles, viewers and webhooks.<\/p>","raw_excerpt":"A fast, customizable video &amp; audio player for self-hosted files, YouTube, Vimeo and HLS \u2014 with chapters, playlists, presets and email capture.","jetpack_sharing_enabled":true,"_links":{"self":[{"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin\/383691","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin"}],"about":[{"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/types\/plugin"}],"replies":[{"embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/comments?post=383691"}],"author":[{"embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wporg\/v1\/users\/kodezen"}],"wp:attachment":[{"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/media?parent=383691"}],"wp:term":[{"taxonomy":"plugin_section","embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_section?post=383691"},{"taxonomy":"plugin_tags","embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_tags?post=383691"},{"taxonomy":"plugin_category","embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_category?post=383691"},{"taxonomy":"plugin_contributors","embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_contributors?post=383691"},{"taxonomy":"plugin_business_model","embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_business_model?post=383691"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}