| 1 |
=== BeyondWords - AI audio for publishers === |
| 2 |
|
| 3 |
Contributors: beyondwords, stuartmcalpine |
| 4 |
Donate link: https://beyondwords.io |
| 5 |
Tags: text-to-speech, tts, audio, AI, voice cloning |
| 6 |
Stable tag: 7.1.0 |
| 7 |
Requires at least: 6.6 |
| 8 |
Requires PHP: 8.0 |
| 9 |
Tested up to: 7.1 |
| 10 |
License: GPLv2 or later |
| 11 |
License URI: http://www.gnu.org/licenses/gpl-2.0.html |
| 12 |
|
| 13 |
Turn WordPress articles into audio as you publish, with tools for distribution, monetization, and analytics. |
| 14 |
|
| 15 |
== Description == |
| 16 |
|
| 17 |
Turn WordPress articles into audio as you publish, with tools for distribution, monetization, and analytics. |
| 18 |
|
| 19 |
= Let audiences listen to your articles = |
| 20 |
|
| 21 |
BeyondWords turns selected WordPress posts and pages into audio automatically. |
| 22 |
|
| 23 |
Your editors keep working in WordPress. BeyondWords generates the audio, adds a customizable player, and automatically update audio when articles changes. |
| 24 |
|
| 25 |
Choose from premade voices, generate a voice from a prompt, or create Instant and Professional voice clones. Voices are powered by ElevenLabs. |
| 26 |
|
| 27 |
= What you can do = |
| 28 |
|
| 29 |
* Choose which posts and pages become audio |
| 30 |
* Create full audio articles or shorter audio summaries |
| 31 |
* Add a customizable player with automatic word highlighting |
| 32 |
* Correct pronunciations and review audio before publishing |
| 33 |
* Build playlists and podcast feeds |
| 34 |
* Monetize listening through advertising and subscriptions |
| 35 |
* Measure plays, engagement, listening time, and completion |
| 36 |
|
| 37 |
= Distribute in WordPress and beyond = |
| 38 |
|
| 39 |
Embed audio in your articles, create playlists, publish podcast feeds to services such as Spotify and Apple Podcasts, share audio via URL, or share and download audio files. |
| 40 |
|
| 41 |
= Built for WordPress workflows = |
| 42 |
|
| 43 |
Set defaults for your publication, then override them on individual posts. |
| 44 |
|
| 45 |
BeyondWords can regenerate audio when an article changes. You can also use WordPress bulk actions to generate audio for existing articles. |
| 46 |
|
| 47 |
For page-builder setups such as Elementor, Magic Embed provides an alternative to the standard REST API integration. |
| 48 |
|
| 49 |
= Monetize listening = |
| 50 |
|
| 51 |
Make audio a subscriber benefit with full, ad-free listening, while using previews or ad-supported audio to encourage other readers to register or subscribe. |
| 52 |
|
| 53 |
Upload your own audio ads or connect your existing ad server through VAST, the common standard for audio advertising. |
| 54 |
|
| 55 |
= What publishers say = |
| 56 |
|
| 57 |
> "We've had great customer feedback and the team have been quick to make adjustments based on our suggestions." |
| 58 |
> |
| 59 |
> Kenneth Creamer, Creamer Media |
| 60 |
|
| 61 |
= Get started = |
| 62 |
|
| 63 |
Book a demo and we'll help you choose the right setup, voices, player, and monetization options for your publication. |
| 64 |
|
| 65 |
[Book a demo](https://beyondwords.io/book-a-demo/) |
| 66 |
|
| 67 |
For questions or support, email <support@beyondwords.io>. |
| 68 |
|
| 69 |
== Installation == |
| 70 |
|
| 71 |
1. Install and activate the BeyondWords plugin. |
| 72 |
2. Connect it to your BeyondWords project. |
| 73 |
3. Choose which posts and pages should become audio. |
| 74 |
4. Set your default voice and player preferences. |
| 75 |
5. Publish as usual. |
| 76 |
|
| 77 |
== Frequently asked questions == |
| 78 |
|
| 79 |
= Can I choose which articles become audio? = |
| 80 |
|
| 81 |
Yes. Set defaults for posts and pages, then change the settings for individual articles from the WordPress editor. |
| 82 |
|
| 83 |
= What happens when I update an article? = |
| 84 |
|
| 85 |
BeyondWords can regenerate the audio using the updated article text. You can also keep the existing audio when an update doesn't require a new version. |
| 86 |
|
| 87 |
= Can we use our own voices? = |
| 88 |
|
| 89 |
Yes. You can create Instant or Professional voice clones for journalists, authors, analysts, presenters, or other speakers. You must have the speaker's permission. |
| 90 |
|
| 91 |
You can also choose a premade voice or generate a voice from a prompt. |
| 92 |
|
| 93 |
= Can we monetize the audio? = |
| 94 |
|
| 95 |
Yes. Upload your own audio ads, connect an existing ad server, or use access tiers to create different listening experiences for visitors, registered readers, and subscribers. |
| 96 |
|
| 97 |
= Can we publish the audio as a podcast? = |
| 98 |
|
| 99 |
Yes. BeyondWords lets you create podcast feeds for services such as Spotify and Apple Podcasts. |
| 100 |
|
| 101 |
= Does it work with Elementor and other page builders? = |
| 102 |
|
| 103 |
Yes. The plugin normally connects WordPress to BeyondWords through our REST API. For Elementor and other page-builder setups where that approach isn’t suitable, Magic Embed uses a script on your site to extract and sync the article content instead. |
| 104 |
|
| 105 |
== Changelog == |
| 106 |
|
| 107 |
= 7.1.0 = |
| 108 |
|
| 109 |
Release date: 4th September 2026 |
| 110 |
|
| 111 |
**Enhancements** |
| 112 |
|
| 113 |
* [#626](https://github.com/beyondwords-io/wordpress-plugin/pull/626) Import Tool: only offer to import to post types BeyondWords supports, and say why each skipped record was skipped. |
| 114 |
* [#623](https://github.com/beyondwords-io/wordpress-plugin/pull/623) Per-block language and voice in the block editor. |
| 115 |
|
| 116 |
**Fixes** |
| 117 |
|
| 118 |
* [#627](https://github.com/beyondwords-io/wordpress-plugin/pull/627) Give audio creates a longer timeout, and recover the content ID when a create still times out after the API accepted it. |
| 119 |
* [#626](https://github.com/beyondwords-io/wordpress-plugin/pull/626) Debug Tool: fix the fatal error raised when activating the plugin. |
| 120 |
* Download the updated ZIP from this release — every earlier build fails on activation. |
| 121 |
* [#623](https://github.com/beyondwords-io/wordpress-plugin/pull/623) Fix "Generation disabled" being ignored on blocks nested inside a Group, Columns or other container. |
| 122 |
* Audio regenerated for an affected post no longer includes those blocks. |
| 123 |
* [#621](https://github.com/beyondwords-io/wordpress-plugin/pull/621) Fix the fatal error shown when the plugin is replaced with a different version from the Plugins screen. |
| 124 |
* Switching away from an existing 7.0.0 install still shows it once; the version being replaced has to be 7.1.0 or later for the fix to apply. |
| 125 |
|
| 126 |
**Deprecations** |
| 127 |
|
| 128 |
* [#626](https://github.com/beyondwords-io/wordpress-plugin/pull/626) Removed the SpeechKit Export Tool, which only exported post meta the plugin stopped writing in v4.0. |
| 129 |
* Site Health and the editor's Inspect panel report the same data for current installs. |
| 130 |
|
| 131 |
**Compatibility** |
| 132 |
|
| 133 |
* [#626](https://github.com/beyondwords-io/wordpress-plugin/pull/626) Debug Tool: request logging is now switched off on WordPress VIP, where it could not append to its log file safely. |
| 134 |
* [#624](https://github.com/beyondwords-io/wordpress-plugin/pull/624) Tested up to WordPress 7.1. |
| 135 |
|
| 136 |
**Codebase Enhancements** |
| 137 |
|
| 138 |
* [#626](https://github.com/beyondwords-io/wordpress-plugin/pull/626) Install and smoke-test the extension plugins in CI, and document them in `doc/extension-plugins.md`. |
| 139 |
* [#624](https://github.com/beyondwords-io/wordpress-plugin/pull/624) Turn off Cypress web security so the block editor specs run on WordPress 7.1. |
| 140 |
* [#629](https://github.com/beyondwords-io/wordpress-plugin/pull/629) Finalise the 7.1.0 release notes. |
| 141 |
* [#628](https://github.com/beyondwords-io/wordpress-plugin/pull/628) Dependency upgrades. |
| 142 |
* [#625](https://github.com/beyondwords-io/wordpress-plugin/pull/625) Mount the plugin at a fixed `speechkit` slug in the local wp-env environments. |
| 143 |
* [#622](https://github.com/beyondwords-io/wordpress-plugin/pull/622) Correct the 7.0.0 changelog entry for the "Add Player" block preview. |
| 144 |
|
| 145 |
= 7.0.0 = |
| 146 |
|
| 147 |
Release date: 12th August 2026 |
| 148 |
|
| 149 |
**Enhancements** |
| 150 |
|
| 151 |
* [#566](https://github.com/beyondwords-io/wordpress-plugin/pull/566) Poll the content status before embedding the player. |
| 152 |
* The block and classic editor previews now wait until content has finished processing — showing a loading spinner meanwhile — instead of embedding the player immediately and caching a 404 when the audio or video isn't ready yet. |
| 153 |
* [#520](https://github.com/beyondwords-io/wordpress-plugin/pull/520) New settings page and project-wide rewrite. |
| 154 |
* Simplifies the plugin settings — removing many tabs, fields and options — so that audio/video generation and player display are managed from your BeyondWords project settings. |
| 155 |
* Standardises the codebase to WordPress VIP coding standards and migrates CI tooling from Yarn to npm. |
| 156 |
* [#527](https://github.com/beyondwords-io/wordpress-plugin/pull/527) BeyondWords editor redesign for the block and classic editors. |
| 157 |
* New Content (Source, Script template), Format (Output, Video template, Video size), Voice (Language, Model, Voice) and Player (Embed) settings, available in both editors. |
| 158 |
* The Player "Embed" setting replaces the "Display player" checkbox — choose "None" to hide the player on a post. |
| 159 |
* [#536](https://github.com/beyondwords-io/wordpress-plugin/pull/536) Wire up the Player "Embed" setting. |
| 160 |
* The Embed choice (audio/video × post/script) now controls the rendered player, rather than only showing or hiding it. |
| 161 |
* [#537](https://github.com/beyondwords-io/wordpress-plugin/pull/537) Opt-in "Customize" voice and language controls. |
| 162 |
* A per-post "Customize" toggle (off by default) reveals the Language and Voice pickers; the project's default language is pre-selected when enabled. |
| 163 |
* The Voice and Language settings are consolidated into the plugin sidebar. |
| 164 |
* [#558](https://github.com/beyondwords-io/wordpress-plugin/pull/558) Reorder the voice picker to Language → Model → Voice. |
| 165 |
* "Model" is now a language-level filter that narrows the Voice list. |
| 166 |
* [#557](https://github.com/beyondwords-io/wordpress-plugin/pull/557) Preselect "Generate audio" by taxonomy term. |
| 167 |
* Reinstates preselecting audio generation for posts assigned specific terms, now across all hierarchical taxonomies and without marking posts as having unsaved changes. |
| 168 |
* [#555](https://github.com/beyondwords-io/wordpress-plugin/pull/555) Live player preview for the "Add Player" block. (Reverted in [#568](https://github.com/beyondwords-io/wordpress-plugin/pull/568) before 7.0.0 shipped — the block shows a static placeholder in the editor; the player still renders on the front end.) |
| 169 |
* [#563](https://github.com/beyondwords-io/wordpress-plugin/pull/563) State-reflecting generation labels and "Legacy" model rename. |
| 170 |
* The "Generate audio" toggle now reads "Generation enabled" / "Generation disabled"; the "Standard" voice model bucket is relabelled "Legacy". |
| 171 |
* [#532](https://github.com/beyondwords-io/wordpress-plugin/pull/532) Cache API reads and defer audio generation on WordPress VIP. |
| 172 |
* Editor dropdown data is cached in 15-minute transients; on VIP, audio create/update is deferred to WP-Cron so the save request returns immediately. |
| 173 |
* [#598](https://github.com/beyondwords-io/wordpress-plugin/pull/598) Send taxonomy terms as `tags`. |
| 174 |
* Breaking: the `metadata` param is no longer sent. Code hooking `beyondwords_content_params` to write `$params['metadata']` must append to `$params['tags']` instead, or it will raise a fatal error. |
| 175 |
* [#611](https://github.com/beyondwords-io/wordpress-plugin/pull/611) Tidy the classic editor metabox spacing and Content ID layout. |
| 176 |
|
| 177 |
**Fixes** |
| 178 |
|
| 179 |
* [#618](https://github.com/beyondwords-io/wordpress-plugin/pull/618) Poll content status before embedding the block-editor Preview panel player, so a still-processing post (more likely with a customised voice/model) no longer shows a broken preview. |
| 180 |
* [#613](https://github.com/beyondwords-io/wordpress-plugin/pull/613) Fix author names with an ampersand showing as `Smith & Sons` in the BeyondWords dashboard. |
| 181 |
* [#612](https://github.com/beyondwords-io/wordpress-plugin/pull/612) Fix tags with an ampersand showing as `r&d` in the BeyondWords dashboard. |
| 182 |
* [#610](https://github.com/beyondwords-io/wordpress-plugin/pull/610) Stop the bulk "Generate audio" notice counting skipped posts as failures. |
| 183 |
* [#606](https://github.com/beyondwords-io/wordpress-plugin/pull/606) Fix posts published with no player when two saves race to create audio. |
| 184 |
* [#564](https://github.com/beyondwords-io/wordpress-plugin/pull/564) Sweep the paired `_transient_timeout_beyondwords_*` rows on uninstall, so no orphaned option rows are left behind. |
| 185 |
* [#540](https://github.com/beyondwords-io/wordpress-plugin/pull/540) Escape the player `onload` attribute to prevent stored XSS via the Content ID. |
| 186 |
* [#539](https://github.com/beyondwords-io/wordpress-plugin/pull/539) Add capability checks to the bulk-edit AJAX handler. |
| 187 |
* [#541](https://github.com/beyondwords-io/wordpress-plugin/pull/541) Prevent a player SDK error from clobbering saved content on Fetch. |
| 188 |
* [#554](https://github.com/beyondwords-io/wordpress-plugin/pull/554) Return JSON from the bulk-edit AJAX handler and catch delete errors. |
| 189 |
* [#553](https://github.com/beyondwords-io/wordpress-plugin/pull/553) Resolve the post ID in `Content::get_content_without_excluded_blocks`. |
| 190 |
* [#551](https://github.com/beyondwords-io/wordpress-plugin/pull/551) Track live meta for the Inspect panel Remove button. |
| 191 |
* [#550](https://github.com/beyondwords-io/wordpress-plugin/pull/550) Coerce non-string API error messages to avoid a fatal `TypeError`. |
| 192 |
* [#543](https://github.com/beyondwords-io/wordpress-plugin/pull/543) Guard a null languages API result in the classic editor voice select. |
| 193 |
* [#542](https://github.com/beyondwords-io/wordpress-plugin/pull/542) Surface a `WP_Error` from `get_content()` instead of a fatal `TypeError`. |
| 194 |
* [#588](https://github.com/beyondwords-io/wordpress-plugin/pull/588) Ship `symfony/dom-crawler` 5.4.52 to fix CVE-2026-45071 (XXE / local file disclosure). |
| 195 |
* The composer constraint now floors at the patched release, so a vulnerable version can no longer be bundled. |
| 196 |
|
| 197 |
**Deprecations** |
| 198 |
|
| 199 |
* Removed the `beyondwords_player_style`, `beyondwords_player_content`, `beyondwords_title_voice_id`, `beyondwords_summary_voice_id` and `beyondwords_disabled` post meta keys. |
| 200 |
* Existing values are preserved in the database and only removed on full uninstall; `beyondwords_disabled` is migrated to the new "Embed" setting on upgrade. |
| 201 |
* The `beyondwords-*` `<head>` meta tags are now only emitted for the client-side (Magic Embed) integration. |
| 202 |
* [#601](https://github.com/beyondwords-io/wordpress-plugin/pull/601) Removed the "Script" option from the post Source setting, which now offers "Post" or "Post + script". |
| 203 |
* Posts saved as "Script" are migrated to "Post + script" on upgrade, and keep embedding their script asset. |
| 204 |
|
| 205 |
**Compatibility** |
| 206 |
|
| 207 |
* Tested up to WordPress 7.0. |
| 208 |
* [#515](https://github.com/beyondwords-io/wordpress-plugin/pull/515) PHP 8.5 support. |
| 209 |
* Run unit and e2e tests against PHP 8.0 and PHP 8.5 in GitHub Actions. |
| 210 |
* Bumped `phpVersion` in wp-env to 8.5. |
| 211 |
|
| 212 |
**Codebase Enhancements** |
| 213 |
|
| 214 |
* [#619](https://github.com/beyondwords-io/wordpress-plugin/pull/619) Run the Cypress suite with pretty permalinks, fixing the block editor Preview panel content-status poll spec. |
| 215 |
* [#591](https://github.com/beyondwords-io/wordpress-plugin/pull/591) Refresh the developer documentation in `doc/` against the v7 codebase. |
| 216 |
* [#608](https://github.com/beyondwords-io/wordpress-plugin/pull/608) Fix the intermittent detached-DOM failures in the block editor Cypress specs. |
| 217 |
* [#607](https://github.com/beyondwords-io/wordpress-plugin/pull/607) Update two PHPUnit tests left stale by the Script-only Source removal. |
| 218 |
* [#602](https://github.com/beyondwords-io/wordpress-plugin/pull/602) Align the player-visibility docs and Cypress specs with the "Embed" setting. |
| 219 |
* [#600](https://github.com/beyondwords-io/wordpress-plugin/pull/600) Add must-follow documentation and changelog rules to `AGENTS.md`, with `CLAUDE.md` and Copilot pointer files. |
| 220 |
* [#533](https://github.com/beyondwords-io/wordpress-plugin/pull/533) Fix failing Cypress tests for v7. |
| 221 |
* [#538](https://github.com/beyondwords-io/wordpress-plugin/pull/538) Remove the unused `updatePostMeta` util from the Inspect panel. |
| 222 |
* [#562](https://github.com/beyondwords-io/wordpress-plugin/pull/562) Re-enable Plugin Check on `plugin-check-action` v1.1.7. |
| 223 |
* [#560](https://github.com/beyondwords-io/wordpress-plugin/pull/560) Cancel superseded CI runs via a concurrency group. |
| 224 |
* [#516](https://github.com/beyondwords-io/wordpress-plugin/pull/516) Remove `environment` from the GitHub workflows. |
| 225 |
* [#517](https://github.com/beyondwords-io/wordpress-plugin/pull/517), [#535](https://github.com/beyondwords-io/wordpress-plugin/pull/535) Update GitHub Actions dependencies. |
| 226 |
* [#514](https://github.com/beyondwords-io/wordpress-plugin/pull/514), [#529](https://github.com/beyondwords-io/wordpress-plugin/pull/529), [#534](https://github.com/beyondwords-io/wordpress-plugin/pull/534), [#616](https://github.com/beyondwords-io/wordpress-plugin/pull/616) Dependency upgrades. |
| 227 |
* Various dependency updates to clear Dependabot security warnings. |
| 228 |
|
| 229 |
-------- |
| 230 |
|
| 231 |
[See the previous changelogs here](https://plugins.trac.wordpress.org/browser/speechkit/trunk/changelog.txt). |
| 232 |
|