{"id":375825,"date":"2026-10-10T08:51:17","date_gmt":"2026-10-10T08:51:17","guid":{"rendered":"https:\/\/wordpress.org\/plugins\/article-voice-reader\/"},"modified":"2026-10-10T08:51:10","modified_gmt":"2026-10-10T08:51:10","slug":"hearpost","status":"publish","type":"plugin","link":"https:\/\/wordpress.org\/plugins\/hearpost\/","author":23572819,"comment_status":"closed","ping_status":"closed","template":"","meta":{"version":"1.0.0","stable_tag":"1.0.0","tested":"7.1.3","requires":"5.8","requires_php":"7.4","requires_plugins":null,"header_name":"Hearpost","header_author":"Pathmaka Galappaththi","header_description":"Adds a floating \"Listen to this article\" widget to your posts using the visitor's browser built-in text-to-speech. No API keys, no external services, no ongoing cost.","assets_banners_color":"208497","last_updated":"2026-10-10 08:51:10","external_support_url":"","external_repository_url":"","donate_link":"","header_plugin_uri":"","header_author_uri":"","rating":0,"author_block_rating":0,"active_installs":0,"downloads":31,"num_ratings":0,"support_threads":0,"support_threads_resolved":0,"author_block_count":0,"sections":["description","installation","faq","changelog"],"tags":{"1.0.0":{"tag":"1.0.0","author":"pathmaka","date":"2026-10-10 08:51:10","revision":3737795}},"upgrade_notice":{"1.0.0":"<p>Initial release.<\/p>"},"ratings":[],"assets_icons":{"icon-128x128.png":{"filename":"icon-128x128.png","revision":3737791,"resolution":"128x128","location":"assets","locale":"","width":128,"height":128},"icon-256x256.png":{"filename":"icon-256x256.png","revision":3737791,"resolution":"256x256","location":"assets","locale":"","width":256,"height":256},"icon.svg":{"filename":"icon.svg","revision":3737791,"resolution":false,"location":"assets","locale":false}},"assets_banners":{"banner-1544x500.png":{"filename":"banner-1544x500.png","revision":3737791,"resolution":"1544x500","location":"assets","locale":"","width":1544,"height":500},"banner-772x250.png":{"filename":"banner-772x250.png","revision":3737791,"resolution":"772x250","location":"assets","locale":"","width":772,"height":250}},"assets_blueprints":{},"all_blocks":[],"tagged_versions":["1.0.0"],"block_files":[],"assets_screenshots":{"screenshot-1.png":{"filename":"screenshot-1.png","revision":3737791,"resolution":"1","location":"assets","locale":"","width":197,"height":277},"screenshot-2.png":{"filename":"screenshot-2.png","revision":3737791,"resolution":"2","location":"assets","locale":"","width":197,"height":277},"screenshot-3.png":{"filename":"screenshot-3.png","revision":3737791,"resolution":"3","location":"assets","locale":"","width":1775,"height":850},"screenshot-4.png":{"filename":"screenshot-4.png","revision":3737791,"resolution":"4","location":"assets","locale":"","width":1885,"height":825}},"screenshots":{"1":"Collapsed widget \u2014 the floating icon as visitors first see it","2":"Expanded widget \u2014 the player panel with Play\/Pause, speed slider, and voice selector","3":"Settings page \u2014 Settings \u2192 Hearpost in wp-admin","4":"Widget while actively reading an article aloud"}},"plugin_section":[],"plugin_tags":[1953,452,209797,61815,16722],"plugin_category":[34,50],"plugin_contributors":[285500],"plugin_business_model":[],"class_list":["post-375825","plugin","type-plugin","status-publish","hentry","plugin_tags-accessibility","plugin_tags-audio","plugin_tags-read-aloud","plugin_tags-speech-synthesis","plugin_tags-text-to-speech","plugin_category-accessibility","plugin_category-media","plugin_contributors-pathmaka","plugin_committers-pathmaka"],"banners":{"banner":"https:\/\/ps.w.org\/hearpost\/assets\/banner-772x250.png?rev=3737791","banner_2x":"https:\/\/ps.w.org\/hearpost\/assets\/banner-1544x500.png?rev=3737791","banner_rtl":false,"banner_2x_rtl":false},"icons":{"svg":"https:\/\/ps.w.org\/hearpost\/assets\/icon.svg?rev=3737791","icon":"https:\/\/ps.w.org\/hearpost\/assets\/icon.svg?rev=3737791","icon_2x":false,"generated":false},"screenshots":[{"src":"https:\/\/ps.w.org\/hearpost\/assets\/screenshot-1.png?rev=3737791","caption":"Collapsed widget \u2014 the floating icon as visitors first see it"},{"src":"https:\/\/ps.w.org\/hearpost\/assets\/screenshot-2.png?rev=3737791","caption":"Expanded widget \u2014 the player panel with Play\/Pause, speed slider, and voice selector"},{"src":"https:\/\/ps.w.org\/hearpost\/assets\/screenshot-3.png?rev=3737791","caption":"Settings page \u2014 Settings \u2192 Hearpost in wp-admin"},{"src":"https:\/\/ps.w.org\/hearpost\/assets\/screenshot-4.png?rev=3737791","caption":"Widget while actively reading an article aloud"}],"raw_content":"<!--section=description-->\n<p>Hearpost adds a floating text-to-speech widget to your posts and pages, using the browser's built-in <a href=\"https:\/\/developer.mozilla.org\/en-US\/docs\/Web\/API\/Web_Speech_API\">Web Speech API<\/a> (<code>SpeechSynthesisUtterance<\/code>). Nothing is sent to any external server \u2014 the entire reading happens locally in the visitor's browser.<\/p>\n\n<h4>Features<\/h4>\n\n<ul>\n<li><strong>Floating widget<\/strong> \u2014 collapses to a small icon; click to expand into the full player<\/li>\n<li><strong>Play \/ Pause<\/strong> toggle, with a <strong>Speed slider<\/strong> (0.5x\u20132x)<\/li>\n<li><strong>Voice selector<\/strong> \u2014 automatically shown only when the visitor's browser actually offers more than one voice; hidden entirely otherwise<\/li>\n<li><strong>Six position presets<\/strong> \u2014 Top Left, Top Right, Middle Left, Middle Right, Bottom Left, Bottom Right<\/li>\n<li><strong>Customizable icon color<\/strong> via a native WordPress color picker<\/li>\n<li><strong>Customizable widget title<\/strong>, also shown as a hover tooltip on the collapsed icon<\/li>\n<li><strong><code>[hearpost_reader]<\/code> shortcode<\/strong> for manual placement, if you'd rather not auto-insert it everywhere<\/li>\n<li><strong>Reset to Defaults<\/strong> button to wipe customizations and start over<\/li>\n<li>Fully self-contained icon (inline SVG) \u2014 no external requests, not even to WordPress's own emoji CDN<\/li>\n<\/ul>\n\n<h4>Notes &amp; Limitations<\/h4>\n\n<ul>\n<li>Voice availability is entirely browser\/OS-dependent. Desktop Chrome tends to offer several voices; some mobile browsers offer only one (or none) \u2014 in the latter case, the Voice dropdown is automatically hidden.<\/li>\n<li>Changing speed or voice mid-playback resumes from roughly the last spoken word (tracked via the browser's <code>boundary<\/code> events) rather than restarting from the top \u2014 but this depends on the browser\/voice actually firing those events. When it isn't supported, it falls back to restarting from the beginning.<\/li>\n<li>Closing the widget (\u00d7) does not pause or stop playback \u2014 it keeps reading in the background, the same way a minimized media player would. Reopening the panel reflects the correct Play\/Pause state.<\/li>\n<li>Some browsers' built-in voices (e.g. certain Chrome \"network\" voices) stream over the internet in the background as an inherent part of how the browser implements them \u2014 this is outside the plugin's control either way.<\/li>\n<\/ul>\n\n<!--section=installation-->\n<h4>From your WordPress dashboard<\/h4>\n\n<ol>\n<li>Visit <strong>Plugins \u2192 Add New<\/strong><\/li>\n<li>Search for \"Hearpost\"<\/li>\n<li>Click <strong>Install Now<\/strong>, then <strong>Activate<\/strong><\/li>\n<\/ol>\n\n<h4>Manual installation<\/h4>\n\n<ol>\n<li>Download the plugin as a <code>.zip<\/code> file<\/li>\n<li>Upload the <code>hearpost<\/code> folder to <code>\/wp-content\/plugins\/<\/code>, or install it via <strong>Plugins \u2192 Add New \u2192 Upload Plugin<\/strong><\/li>\n<li>Activate <strong>Hearpost<\/strong> from the Plugins screen<\/li>\n<\/ol>\n\n<h4>Once activated<\/h4>\n\n<p>Configure it at <strong>Settings \u2192 Hearpost<\/strong>.<\/p>\n\n<h4>Settings<\/h4>\n\n<ul>\n<li><strong>Enable on<\/strong> \u2014 Choose whether the widget appears on Posts, Pages, or both<\/li>\n<li><strong>Widget<\/strong> \u2014 Toggle automatic insertion on\/off. If disabled, place it manually with the <code>[hearpost_reader]<\/code> shortcode \u2014 it still floats at the position chosen below regardless of where the shortcode is placed<\/li>\n<li><strong>Position<\/strong> \u2014 Where the widget floats: Top\/Middle\/Bottom \u00d7 Left\/Right (6 options)<\/li>\n<li><strong>Icon color<\/strong> \u2014 Background color of the icon and Play button, via a standard color picker<\/li>\n<li><strong>Default speed<\/strong> \u2014 Initial playback speed (0.5x\u20132x) before a visitor adjusts the slider<\/li>\n<li><strong>Widget title<\/strong> \u2014 The text shown inside the expanded panel and as the hover tooltip on the collapsed icon<\/li>\n<li><strong>Reset to Defaults<\/strong> \u2014 Wipes all of the above back to their original defaults (asks for confirmation first)<\/li>\n<\/ul>\n\n<!--section=faq-->\n<dl>\n<dt id=\"does%20this%20send%20my%20content%20to%20any%20external%20service%3F\"><h3>Does this send my content to any external service?<\/h3><\/dt>\n<dd><p>No. The plugin extracts the plain text of a post\/page server-side and hands it to the visitor's own browser via the Web Speech API. Nothing is sent to any external server \u2014 the entire reading happens locally in the visitor's browser.<\/p><\/dd>\n<dt id=\"why%20don%27t%20i%20see%20a%20voice%20dropdown%3F\"><h3>Why don't I see a Voice dropdown?<\/h3><\/dt>\n<dd><p>The dropdown is only shown when the visitor's browser reports more than one available voice. Voice availability is entirely browser\/OS-dependent \u2014 some mobile browsers only expose one voice (or none).<\/p><\/dd>\n<dt id=\"can%20i%20place%20the%20widget%20manually%20instead%20of%20having%20it%20auto-inserted%3F\"><h3>Can I place the widget manually instead of having it auto-inserted?<\/h3><\/dt>\n<dd><p>Yes. Turn off automatic insertion under Settings \u2192 Hearpost \u2192 Widget, then add the <code>[hearpost_reader]<\/code> shortcode to any post or page where you want it. Note that it always floats at the position configured in settings, regardless of where the shortcode itself is placed in the content.<\/p><\/dd>\n<dt id=\"does%20this%20work%20on%20mobile%20browsers%3F\"><h3>Does this work on mobile browsers?<\/h3><\/dt>\n<dd><p>It works wherever the Web Speech API is supported, which varies by browser and OS. Voice quality and the number of available voices depend entirely on the visitor's browser and device.<\/p><\/dd>\n\n<\/dl>\n\n<!--section=changelog-->\n<h4>1.0.0<\/h4>\n\n<ul>\n<li>Initial release<\/li>\n<li>Floating widget (collapsible icon \u2192 expands to full player)<\/li>\n<li>Play\/Pause toggle with adjustable speed (0.5x\u20132x slider)<\/li>\n<li>Optional voice selector, shown only when the browser offers more than one voice<\/li>\n<li>Six position presets, customizable icon color, and customizable widget title<\/li>\n<li><code>[hearpost_reader]<\/code> shortcode for manual placement<\/li>\n<li>Reset to Defaults option<\/li>\n<li>Self-contained inline SVG icon (no external requests)<\/li>\n<\/ul>","raw_excerpt":"A floating \"Listen to this article\" widget powered by the visitor's own browser. No API keys, no external services, no ongoing cost.","jetpack_sharing_enabled":true,"_links":{"self":[{"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin\/375825","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=375825"}],"author":[{"embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wporg\/v1\/users\/pathmaka"}],"wp:attachment":[{"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/media?parent=375825"}],"wp:term":[{"taxonomy":"plugin_section","embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_section?post=375825"},{"taxonomy":"plugin_tags","embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_tags?post=375825"},{"taxonomy":"plugin_category","embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_category?post=375825"},{"taxonomy":"plugin_contributors","embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_contributors?post=375825"},{"taxonomy":"plugin_business_model","embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_business_model?post=375825"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}