WordPress maintenance or security needs? Reach out!
TLDWP

Plugin: spoken-word (Used by 15 domains)

Spoken Word

πŸ‘€ Weston Ruter πŸ”— Plugin Homepage

Add text-to-speech (TTS) to content, with playback controls, read-along highlighting, multi-lingual support, and settings for rate, pitch, and voice.

  • Uses local text-to-speech engine in user’s browser. Directly interfaces with the speechSynthesis browser API. Zero external requests or dependencies.
  • Words are selected/highlighted as they are being spoken to allow you to read along.
  • Skips speaking elements that should not be read, including footnote superscripts (the sup element).
  • Pauses of different length added are between headings versus paragraphs.
  • Controls remain in view during playback, with each the current text being spoken persistently being scrolled into view. (Requires browser support for position:sticky.)
  • Back/forward controls allow you to skip to the next paragraph; when not speaking, the next paragraph to read will be selected entirely.
  • Select text to read from that point; click on text during speech to immediately change position.
  • Multi-lingual support, allowing embedded text with [lang] attribute to be spoken by the appropriate voice (assuming the user has it installed).
  • Settings for changing the default voice (for each language), along with settings for the rate of speech and its pitch. (Not supported by all engines.) Changes can be made while speaking.
  • Hit escape to pause during playback.
  • Voice preferences are persistently stored in localStorage, with changes synced across windows (of a given site).
  • Ability to use JS in standalone manner (such as in bookmarklet).
  • Known to work in the latest desktop versions of Chrome, Firefox, and Safari. (Tested on OSX.) It does not work reliably in mobile/touch browsers on Android or iOS, apparently due both to the (still experimental) speechSynthesis API not being implemented well enough on those systems and/or programmatic range selection does not work the same way as on desktop. For these reasons, the functionality is disabled by default on mobile operating systems.

Try it out on standalone example with some test content.

Theme Config

The settings for Spoken Word are presented in an HTML5 dialog element. For browsers that do not yet support this feature, the plugin bundles the dialog-polyfill. The polyfill is only included if it is detected the browser does not support dialog natively. The inclusion of the polyfill can be disabled by adding the following to your theme or plugin:

add_filter( 'spoken_word_include_dialog_polyfill', '__return_false' );

For themes that have a sticky header (such as the nav menu in Twenty Seventeen) you may need to add some additional CSS to ensure that the sticky-positioned playback controls do not get hidden behind the sticky header. For example in Twenty Seventeen, you can add the following to the Custom CSS in the Customizer:

@media screen and (min-width: 782px) {
    body:not(.admin-bar) .spoken-word--active {
        top: calc( 0.5em + 70px );
    }
    body.admin-bar .spoken-word--active {
        top: calc( 0.5em + 32px + 70px );
    }
}

Internals

A bookmarklet can be used to load the Spoken Word functionality into any site, even non-WordPress sites where the plugin is not installed. The key is to use the appropriate contentSelector:

( () => {
    const link = document.createElement( 'link' );
    link.rel = 'stylesheet';
    link.href = 'https://unpkg.com/spoken-word/css/style.css';
    document.head.appendChild( link );

    const script = document.createElement( 'script' );
    script.src = 'https://unpkg.com/spoken-word/dist/spoken-word.js';
    script.addEventListener( 'load', () => {
        spokenWord.initialize( {
            contentSelector: [ /* πŸ‘ˆ Amend as desired. */
                '.hentry',
                '.entry-content',
                '.h-entry',
                '.e-content',
                '[itemprop="articleBody"]',
            ].join( ', ' )
        } );
    } );
    document.head.appendChild( script );
} )();

The spokenWord.initialize() function takes an object as its argument which can have the following properties:

 * @param {string}  contentSelector         - CSS Selector to find the elements for speaking.
 * @param {Element} rootElement             - Root element within which to look for content.
 * @param {Object}  chunkifyOptions         - Options passed into chunkify.
 * @param {boolean} useDashicons            - Whether to use Dashicons.
 * @param {Object}  defaultUtteranceOptions - Default utterance options when none are supplied from localStorage.

The dialog and the controls are rendered using Preact. For a list of all the modules used by this plugin, see the package.json.

This plugin is developed on GitHub where the source can be viewed. Please report issues there. Pull requests welcome. The spoken-word package is also published on npm.

DomainExposuresHeadersLast Checked
e*p*4*.fr F Sep 3, 2026
a*s*n*u.de F Sep 3, 2026
g*b*e*n*m*x*c*n*.com (WP 7.0.4) F Aug 27, 2026
g*p*i*i*a*s*l*t*o*s.com (WP 7.1) F Aug 27, 2026
c*n*a*o*s*c*a*.com D Aug 21, 2026
a*t*n*c*n*r*.com F Aug 20, 2026
p*a*e*z*o.pl (WP 6.8.2) F Aug 16, 2026
s*s*r*i*e.c*m.br (WP 6.9.5) F Jul 26, 2026
c*m*v*p.com (WP 6.8.3) F Jul 26, 2026
h*r*z*n*e*o*l*n*.com (WP 7.0.2) F Jul 22, 2026
a*a*s*i*a*.c*m.co (WP 7.0.2) D Jul 20, 2026
d*m*v*a*p*n*v*.cz F Jul 20, 2026
c*m*i*c*u*i*a.org F Jul 18, 2026
r*g*t*4*h*l*r*n.o*g.uk D Jul 16, 2026
r*d*u*i*a*e*e*l*n.org (WP 6.4.8) F Jul 15, 2026

Top 50 Plugins

Plugin Count
elementor 1,730,851
contact-form-7 1,721,189
elementor-pro 1,030,831
woocommerce 799,160
revslider 592,105
jetpack 437,583
js_composer 408,516
wp-rocket 327,452
essential-addons-for-elementor-lite 257,700
gravityforms 252,749
complianz-gdpr 252,105
google-site-kit 248,054
cookie-law-info 223,364
instagram-feed 219,947
sitepress-multilingual-cms 206,461
header-footer-elementor 200,562
google-analytics-for-wordpress 199,415
bluehost-wordpress-plugin 189,419
elementskit-lite 174,281
gutenberg 163,245
litespeed-cache 145,163
cookie-notice 144,698
gutenberg-core 142,214
gtranslate 120,894
the-events-calendar 120,488
wpforms-lite 118,651
astra-sites 108,787
popup-maker 106,954
woocommerce-payments 105,990
tablepress 101,271
honeypot 96,606
coblocks 94,330
astra-addon 91,513
duracelltomi-google-tag-manager 88,439
wp-smushit 88,309
layerslider 86,448
all-in-one-seo-pack 86,358
bb-plugin 84,742
akismet 82,542
ml-slider 82,050
premium-addons-for-elementor 80,896
cleantalk-spam-protect 80,348
mailchimp-for-wp 78,910
megamenu 78,677
ewww-image-optimizer 76,841
jet-engine 76,514
wp-pagenavi 76,498
fusion-builder 75,381
smart-slider-3 74,307
gravityformsrecaptcha 72,820

Top 50 Themes

Theme Count
hello-elementor 609,738
Divi 483,693
astra 402,996
flatsome 145,049
Avada 118,419
generatepress 112,324
pub 98,401
oceanwp 78,169
kadence 77,705
enfold 66,989
salient 63,402
twentyseventeen 53,040
twentytwentyfour 51,964
bb-theme 51,672
betheme 51,500
cocoon-master 50,020
blocksy 49,840
h4 49,515
twentytwentyfive 45,477
woodmart 44,738
dt-the7 44,471
neve 37,074
Avada-Child-Theme 36,431
gox 35,993
lightning 30,708
bridge 30,318
twentytwentyone 29,426
swell 29,172
twentytwenty 28,029
bricks 26,775
Impreza 25,573
Newspaper 23,658
twentytwentythree 21,408
epik-redesign 18,879
twentytwentytwo 18,239
uncode 18,008
twentysixteen 17,308
pro 17,260
storefront 15,772
sydney 15,730
Total 14,089
factory-templates-4 13,881
hello-theme-child-master 13,639
themify-ultra 12,712
hestia 12,288
yootheme 12,281
yith-wonder 11,735
jupiter 11,591
porto 11,567
twentyfifteen 11,459