PluginProbe
BeyondWords – AI audio for publishers / 7.2.0
BeyondWords – AI audio for publishers v7.2.0
7.2.0 7.1.0 trunk 4.0.0 4.0.1 4.0.2 4.0.3 4.0.4 4.0.5 4.0.6 4.1.0 4.1.1 4.1.2 4.2.0 4.2.1 4.2.2 4.2.3 4.2.4 4.3.0 4.4.0 4.5.0 4.5.1 4.6.0 4.6.1 4.6.2 All 44 releases
← All changes | readme.txt +164 -232 4.5.0 → 7.2.0 View file →
@@ -1,319 +1,251 @@
1 -=== BeyondWords - Text-to-Speech ===
1 +=== BeyondWords - AI audio for publishers ===
2 2
3 3 Contributors: beyondwords, stuartmcalpine
4 4 Donate link: https://beyondwords.io
5 -Tags: text to speech, text to audio, tts, speech synthesis, podcast, audio
6 -Stable tag: 4.5.0
7 -Requires PHP: 7.4
8 -Tested up to: 6.4
5 +Tags: text-to-speech, tts, audio, AI, voice cloning
6 +Stable tag: 7.2.0
7 +Requires at least: 6.6
8 +Requires PHP: 8.0
9 +Tested up to: 7.1
9 10 License: GPLv2 or later
10 11 License URI: http://www.gnu.org/licenses/gpl-2.0.html
11 -BeyondWords is the AI voice platform that brings frictionless audio publishing to newsrooms, writers, and businesses.
12 12
13 +Turn WordPress articles into audio as you publish, with tools for distribution, monetization, and analytics.
14 +
13 15 == Description ==
14 16
15 -BeyondWords is the AI voice platform that brings frictionless audio publishing to newsrooms, writers, and businesses. Automatically create audio versions of WordPress posts and pages and embed via a customizable player. Lifelike neural voices and customizable text-to-speech algorithms deliver realistic speech that keeps listeners coming back for more.
17 +Turn WordPress articles into audio as you publish, with tools for distribution, monetization, and analytics.
16 18
17 -== GET STARTED IN MINUTES ==
19 += Let audiences listen to your articles =
18 20
19 -1. [Create a free Pilot account](https://dash.beyondwords.io/auth/signup?utm_source=wordpress&utm_medium=referral&utm_campaign=&utm_content=plugin) (no credit card required)
20 -2. Copy the project ID and API key from your dashboard
21 -3. Download and [set up the WordPress plugin](https://docs.beyondwords.io/docs-and-guides/content/connect-cms/wordpress/install?utm_source=wordpress&utm_medium=referral&utm_campaign=&utm_content=plugin)
21 +BeyondWords turns selected WordPress posts and pages into audio automatically.
22 22
23 -== Key features of our text-to-speech plugin for WordPress: ==
23 +Your editors keep working in WordPress. BeyondWords generates the audio, adds a customizable player, and automatically update audio when articles changes.
24 24
25 -* Easily pick which pages and posts are converted into audio
26 -* Audio is automatically created and embedded via our customizable player
27 -* Powerful and versatile player options to fit your web and mobile experience.
25 +Choose from premade voices, generate a voice from a prompt, or create Instant and Professional voice clones. Voices are powered by ElevenLabs.
28 26
29 -== Key features of your BeyondWords dashboard: ==
27 += What you can do =
30 28
31 -* Lifelike AI voices enhanced by customizable NLP algorithms
32 -* Create or edit audio in the Text-to-Speech Editor
33 -* Curate custom playlists and podcast feeds
34 -* Embed audio manually or share via URL
35 -* Monitor engagement through analytics
36 -* Manage audio through the audio CMS
37 -* Monetize your audio with audio ads
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
38 36
39 -You are just minutes away from engaging audiences with AI audio. Join the hundreds of WordPress publishers already using our text-to-speech plugin and platform to make the most of their news articles, reports, guides, and more.
37 += Distribute in WordPress and beyond =
40 38
41 -If you have any questions, feedback, or issues, please email <[email protected]>.
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.
42 40
43 -== CUSTOMER TESTIMONIAL ==
41 += Built for WordPress workflows =
44 42
45 -> "We've been using BeyondWords to convert our articles into audio for over a year. Overall, we are very impressed with the service. The quality of the audio is consistently the best we've found available, the plugin and dashboard provides all the functionality we need, processing and delivery of the audio is fast and the players fit nicely on our page. We've had great customer feedback and the team have been quick to make adjustments based on our suggestions."
46 ->
47 -> &mdash; Kenneth Creamer, Creamer Media
43 +Set defaults for your publication, then override them on individual posts.
48 44
49 -== ADVANCED TEXT-TO-SPEECH ==
45 +BeyondWords can regenerate audio when an article changes. You can also use WordPress bulk actions to generate audio for existing articles.
50 46
51 -Looking for the best text-to-speech plugin on WordPress?
47 +For page-builder setups such as Elementor, Magic Embed provides an alternative to the standard REST API integration.
52 48
53 -Using methods like natural language processing (NLP), BeyondWords' unique text processing algorithms optimally convert your content into speech synthesis markup language (SSML). This enables AI voices to effectively pronounce elements that other platforms can struggle with, such as names, numbers, and dates, as well as filtering out elements that shouldn't be read aloud. You can even add aliases to ensure everything is read exactly how you want it.
49 += Monetize listening =
54 50
55 -BeyondWords gives you access to neural voices from Google Cloud, Amazon Web Services, and Microsoft Azure (500+ voices across 140+ language locales).
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.
56 52
57 -You can also get access to premium neural voices &mdash; voice clones of professional voice actors that are exclusive to BeyondWords. Users have the option to develop a completely bespoke custom voice using our voice cloning service.
53 +Upload your own audio ads or connect your existing ad server through VAST, the common standard for audio advertising.
58 54
59 -The result is naturalistic spoken-word audio content that engages your target audience &mdash; at a fraction of the cost of human recordings.
55 += What publishers say =
60 56
61 -== EFFORTLESS DISTRIBUTION ==
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
62 60
63 -BeyondWords makes it easy to reach new audiences and grow your listenership. As well as auto-embedding audio players to your WordPress site, you can embed your audio manually or share via URL. You can even download your audios as mp3 files.
61 += Get started =
64 62
65 -This includes content created automatically with our WordPress text-to-speech plugin, as well as content created manually with the Text-to-Speech Editor &mdash; perfect for audio newsletters.
63 +Book a demo and we'll help you choose the right setup, voices, player, and monetization options for your publication.
66 64
67 -Users can even create custom playlists that keep listeners listening for longer. These can be embedded, shared via URL, or even distributed via podcast feed. That means you can reach audiences through platforms like Apple Podcasts and Spotify.
65 +[Book a demo](https://beyondwords.io/book-a-demo/)
68 66
69 -== ANALYTICS AND MONETIZATION ==
67 +For questions or support, email <[email protected]>.
70 68
71 -You get access to project analytics, which means you can track listener engagement at the project level through your BeyondWords dashboard. Users can also get access to audio analytics, as well as Google Analytics and Google Tag Manager integrations.
69 +== Installation ==
72 70
73 -You can even leverage your listenership through audio advertising. Use our self-serve audio advertising feature to create your own campaigns or use VAST (video ad serving template) to connect a programmatic advertising platform, such as Google Ad Manager.
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.
74 76
75 -== CREATE YOUR FREE ACCOUNT TODAY ==
77 +== Frequently asked questions ==
76 78
77 -[Create your Pilot account](https://dash.beyondwords.io/auth/signup?utm_source=wordpress&utm_medium=referral&utm_campaign=&utm_content=plugin) to see how the BeyondWords text-to-speech plugin improves reach and engagement on your WordPress site. There's a [pricing plan](https://beyondwords.io/pricing/?utm_source=wordpress&utm_medium=referral&utm_campaign=&utm_content=plugin) to suit every publisher, from independent writers to global media companies.
79 += Can I choose which articles become audio? =
78 80
79 -Any questions? [Visit our website](https://beyondwords.io/?utm_source=wordpress&utm_medium=referral&utm_campaign=&utm_content=plugin) or email <[email protected]>.
81 +Yes. Set defaults for posts and pages, then change the settings for individual articles from the WordPress editor.
80 82
81 -== Changelog ==
83 += What happens when I update an article? =
82 84
83 -= 4.5.0 =
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.
84 86
85 -Release date: 1st March 2024
87 += Can we use our own voices? =
86 88
87 -**Enhancements**
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.
88 90
89 -* Audio content for posts created with a future publish date is now available to preview in the WordPress admin players. To achieve this we handle a `preview_token` returned from the BeyondWords REST API.
90 -* In Site Health and throughout the code, replace "Allowed post types" and "Supported post types" post types with "Compatible post types" and "Incompatible post types" to improve clarity.
91 +You can also choose a premade voice or generate a voice from a prompt.
91 92
92 -**Code Refactoring**
93 += Can we monetize the audio? =
93 94
94 -* A general tidy-up of all code and docs for the public open-source release of our plugin repo at https://github.com/beyondwords-io/wordpress-plugin.
95 -* Remove `BEYONDWORDS_DEBUG` constant throughout the code - this was only ever used internally for the legacy player, so it has been removed for the public repo release.
96 -* Prevent side-effects in PHP constructors.
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.
97 96
98 -= 4.4.0 =
97 += Can we publish the audio as a podcast? =
99 98
100 -Release date: 11th January 2024
99 +Yes. BeyondWords lets you create podcast feeds for services such as Spotify and Apple Podcasts.
101 100
102 -**Enhancements**
101 += Does it work with Elementor and other page builders? =
103 102
104 -* Tested up to WordPress 6.4.
105 -* Tested up to PHP 8.3.
106 -* Delete audio when *Remove* feature is used. When you *Remove* audio using the Inspect panel we now make a DELETE request to the BeyondWords API to keep WordPress and the BeyondWords dashboard in sync.
107 -* Add BeyondWords version and WordPress version into copied Inspect Panel data.
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.
108 104
109 -**Fixes**
105 +== Changelog ==
110 106
111 -* Use optional chaining before accessing properties. This fixes an undefined error when the sidebar is loaded. The issue was reported by Cypress testing in our CI pipeline.
107 += 7.2.0 =
112 108
113 -= 4.3.0 =
109 +Release date: 25th September 2026
114 110
115 -Release date: 7th December 2023
111 +**Enhancements**
116 112
117 -**Deprecations**
113 +* [#631](https://github.com/beyondwords-io/wordpress-plugin/pull/631) Audio blocks are now marked with the `data-beyondwords-audio` attribute in the content sent to BeyondWords, so the API handles them as audio.
118 114
119 -We have renamed and removed some of our WordPress filters to make them simpler to understand and to implement.
120 -
121 -The deprecated filters listed below are scheduled to be removed from the code in plugin v5.0, so please migrate to any replacements as soon as possible.
122 -
123 -* Filters we have simply renamed (the functionality remains exactly the same):
124 - * `beyondwords_body_params`: Renamed to `beyondwords_content_params`
125 - * `beyondwords_player_styles`: Renamed to `beyondwords_settings_player_styles`
126 - * `beyondwords_post_types`: Renamed to `beyondwords_settings_post_types`
127 - * `beyondwords_post_statuses`: Renamed to `beyondwords_settings_post_statuses`
128 -* Filters we have removed because there are suitable alternatives:
129 - * `beyondwords_amp_player_html`: Instead, use the `beyondwords_player_html` filter which is now applied to the player HTML for AMP and non-AMP content.
130 - * `beyondwords_content`: Instead, set the `body` key in the `beyondwords_content_params` filter
131 - * `beyondwords_post_metadata`: Instead, set the `metadata` key in the `beyondwords_content_params` filter
132 - * `beyondwords_post_audio_enabled_blocks`: Instead, refer to our [Filter content](https://docs.beyondwords.io/docs-and-guides/content/filter-content) docs for an alternative.
133 - * `beyondwords_post_player_enabled`: Instead, return an empty string in the `beyondwords_player_html` filter to hide the player. Alternatively, you can set `published` to `false` in the BeyondWords dashboard.
134 -* Filters we have deprecated because the functionality is no longer required:
135 - * `beyondwords_js_player_params`: This only applies to the Legacy player which will be removed in plugin v5.0
136 - * `beyondwords_content_id`: We believe this is not being used, please contact [[email protected]](mailto:[email protected]) if you are using this filter.
137 - * `beyondwords_project_id`: We believe this is not being used, please contact [[email protected]](mailto:[email protected]) if you are using this filter.
138 -
139 -We have also renamed `PostContentUtils::getBodyJson` to `PostContentUtils::getContentParams`, to match the `beyondwords_content_params` filter name.
140 -
141 -= 4.2.4 =
142 -
143 -Release date: 15th November 2023
144 -
145 115 **Fixes**
146 116
147 -* Ensure the `$content` param of `Beyondwords\Wordpress\Core\Player\Player::hasCustomPlayer` is a string before using `strpos`.
117 +* [#630](https://github.com/beyondwords-io/wordpress-plugin/pull/630) Fix a block's language and voice fields staying empty when Customize is switched off and back on.
118 +* [#639](https://github.com/beyondwords-io/wordpress-plugin/pull/639) Fix the block editor crashing when the BeyondWords API returns an error for script or video templates.
119 +* [#638](https://github.com/beyondwords-io/wordpress-plugin/pull/638), [#640](https://github.com/beyondwords-io/wordpress-plugin/pull/640) Fix "Publishing failed" in the block editor for posts with legacy BeyondWords data from older plugin versions.
120 +* [#641](https://github.com/beyondwords-io/wordpress-plugin/pull/641) Fix audio generation failing on sites where another plugin's `get_the_excerpt` filter needs the post, when "Prepend excerpt" is on.
148 121
149 -= 4.2.3 =
122 +**Codebase Enhancements**
150 123
151 -Release date: 2nd November 2023
124 +* [#633](https://github.com/beyondwords-io/wordpress-plugin/pull/633) Fix the flaky block-voices Cypress spec by waiting for the save to finish before reading post meta.
125 +* [#635](https://github.com/beyondwords-io/wordpress-plugin/pull/635) Wait for the save to finish in the generate-audio Cypress spec too.
152 126
153 -**Fixes**
127 += 7.1.0 =
154 128
155 -* Pass full-size (originally uploaded) featured image to the BeyondWords API instead of a cropped thumbnail. The 240x240 thumbnail we replaced was not suitable for some styles of the latest player.
129 +Release date: 4th September 2026
156 130
157 -= 4.2.2 =
158 -
159 -Release date: 27th October 2023
160 -
161 -**Fixes**
162 -
163 -* Ensure segment markers are added to the HTML body before we pass it to our REST API. This fixes an issue where "Playback from paragraph" was not working in some cases.
164 -* Update the block control restrictions. This is to fix an issue where the block controls – including the "Audio processing enabled/diabled" toggle – sometimes did not appear when a block was clicked.
165 -
166 -= 4.2.1 =
167 -
168 -Release date: 12th October 2023
169 -
170 131 **Enhancements**
171 132
172 -* Prevent player analytics events from being recorded in WordPress admin by setting the `{ analyticsConsent: 'none' }` param for admin players.
133 +* [#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.
134 +* [#623](https://github.com/beyondwords-io/wordpress-plugin/pull/623) Per-block language and voice in the block editor.
173 135
174 -= 4.2.0 =
175 -
176 -Release date: 10th October 2023
177 -
178 -**Enhancements**
179 -
180 -* Add `[beyondwords_player]` shortcode. See our "WordPress shortcode" docs at [https://docs.beyondwords.io/docs-and-guides/content/connect-cms/wordpress].
181 -
182 136 **Fixes**
183 137
184 -* Ensure an array is always returned for `PlayerStyle::getCachedPlayerStyles()` to prevent PHP warnings.
185 -* For AMP content, the player is no longer auto-prepended if a custom player is found in the content.
186 -* Clean up 'beyondwords_player_style' option on plugin uninstall.
138 +* [#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.
139 +* [#626](https://github.com/beyondwords-io/wordpress-plugin/pull/626) Debug Tool: fix the fatal error raised when activating the plugin.
140 + * Download the updated ZIP from this release — every earlier build fails on activation.
141 +* [#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.
142 + * Audio regenerated for an affected post no longer includes those blocks.
143 +* [#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.
144 + * 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.
187 145
188 -= 4.1.2 =
146 +**Deprecations**
189 147
190 -Release date: 21st September 2023
148 +* [#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.
149 + * Site Health and the editor's Inspect panel report the same data for current installs.
191 150
192 -**Enhancements**
151 +**Compatibility**
193 152
194 -* Added "Large" option into "Player style" plugin setting.
153 +* [#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.
154 +* [#624](https://github.com/beyondwords-io/wordpress-plugin/pull/624) Tested up to WordPress 7.1.
195 155
196 -= 4.1.1 =
156 +**Codebase Enhancements**
197 157
198 -Release date: 15th September 2023
158 +* [#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`.
159 +* [#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.
160 +* [#629](https://github.com/beyondwords-io/wordpress-plugin/pull/629) Finalise the 7.1.0 release notes.
161 +* [#628](https://github.com/beyondwords-io/wordpress-plugin/pull/628) Dependency upgrades.
162 +* [#625](https://github.com/beyondwords-io/wordpress-plugin/pull/625) Mount the plugin at a fixed `speechkit` slug in the local wp-env environments.
163 +* [#622](https://github.com/beyondwords-io/wordpress-plugin/pull/622) Correct the 7.0.0 changelog entry for the "Add Player" block preview.
199 164
200 -**Enhancements**
165 += 7.0.0 =
201 166
202 -* Tested up to WordPress 6.3.
167 +Release date: 12th August 2026
203 168
204 -= 4.1.0 =
205 -
206 -Release date: 15th September 2023
207 -
208 169 **Enhancements**
209 170
210 -* "Player style" support.
211 - * A "Player style" setting has been added to the plugin settings screen where you can assign the default player style for your audio players.
212 - * The default style can be overridden for each post on the post edit screen.
213 - * A `beyondwords_player_styles` filter is available so you can modify the options of the "Player style" select boxes in WordPress admin.
214 - * We are currently beta testing a video. To discuss enabling this for your project please contact [[email protected]](mailto:[email protected]).
215 - * For more information on the supported styles see `playerStyle` at [https://github.com/beyondwords-io/player/blob/main/doc/player-settings.md].
216 -* "Delete audio" option added into "Bulk actions".
171 +* [#566](https://github.com/beyondwords-io/wordpress-plugin/pull/566) Poll the content status before embedding the player.
172 + * 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.
173 +* [#520](https://github.com/beyondwords-io/wordpress-plugin/pull/520) New settings page and project-wide rewrite.
174 + * 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.
175 + * Standardises the codebase to WordPress VIP coding standards and migrates CI tooling from Yarn to npm.
176 +* [#527](https://github.com/beyondwords-io/wordpress-plugin/pull/527) BeyondWords editor redesign for the block and classic editors.
177 + * New Content (Source, Script template), Format (Output, Video template, Video size), Voice (Language, Model, Voice) and Player (Embed) settings, available in both editors.
178 + * The Player "Embed" setting replaces the "Display player" checkbox — choose "None" to hide the player on a post.
179 +* [#536](https://github.com/beyondwords-io/wordpress-plugin/pull/536) Wire up the Player "Embed" setting.
180 + * The Embed choice (audio/video × post/script) now controls the rendered player, rather than only showing or hiding it.
181 +* [#537](https://github.com/beyondwords-io/wordpress-plugin/pull/537) Opt-in "Customize" voice and language controls.
182 + * A per-post "Customize" toggle (off by default) reveals the Language and Voice pickers; the project's default language is pre-selected when enabled.
183 + * The Voice and Language settings are consolidated into the plugin sidebar.
184 +* [#558](https://github.com/beyondwords-io/wordpress-plugin/pull/558) Reorder the voice picker to Language → Model → Voice.
185 + * "Model" is now a language-level filter that narrows the Voice list.
186 +* [#557](https://github.com/beyondwords-io/wordpress-plugin/pull/557) Preselect "Generate audio" by taxonomy term.
187 + * Reinstates preselecting audio generation for posts assigned specific terms, now across all hierarchical taxonomies and without marking posts as having unsaved changes.
188 +* [#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.)
189 +* [#563](https://github.com/beyondwords-io/wordpress-plugin/pull/563) State-reflecting generation labels and "Legacy" model rename.
190 + * The "Generate audio" toggle now reads "Generation enabled" / "Generation disabled"; the "Standard" voice model bucket is relabelled "Legacy".
191 +* [#532](https://github.com/beyondwords-io/wordpress-plugin/pull/532) Cache API reads and defer audio generation on WordPress VIP.
192 + * 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.
193 +* [#598](https://github.com/beyondwords-io/wordpress-plugin/pull/598) Send taxonomy terms as `tags`.
194 + * 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.
195 +* [#611](https://github.com/beyondwords-io/wordpress-plugin/pull/611) Tidy the classic editor metabox spacing and Content ID layout.
217 196
218 197 **Fixes**
219 198
220 -* Fixed the "Remove" button for the Inspect panel in Classic Editor.
221 -* BeyondWords errors now show in the Classic Editor metabox.
222 -* The "Language" and "Voice" selectors now show in the Classic Editor metabox.
199 +* [#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.
200 +* [#613](https://github.com/beyondwords-io/wordpress-plugin/pull/613) Fix author names with an ampersand showing as `Smith &amp; Sons` in the BeyondWords dashboard.
201 +* [#612](https://github.com/beyondwords-io/wordpress-plugin/pull/612) Fix tags with an ampersand showing as `r&amp;d` in the BeyondWords dashboard.
202 +* [#610](https://github.com/beyondwords-io/wordpress-plugin/pull/610) Stop the bulk "Generate audio" notice counting skipped posts as failures.
203 +* [#606](https://github.com/beyondwords-io/wordpress-plugin/pull/606) Fix posts published with no player when two saves race to create audio.
204 +* [#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.
205 +* [#540](https://github.com/beyondwords-io/wordpress-plugin/pull/540) Escape the player `onload` attribute to prevent stored XSS via the Content ID.
206 +* [#539](https://github.com/beyondwords-io/wordpress-plugin/pull/539) Add capability checks to the bulk-edit AJAX handler.
207 +* [#541](https://github.com/beyondwords-io/wordpress-plugin/pull/541) Prevent a player SDK error from clobbering saved content on Fetch.
208 +* [#554](https://github.com/beyondwords-io/wordpress-plugin/pull/554) Return JSON from the bulk-edit AJAX handler and catch delete errors.
209 +* [#553](https://github.com/beyondwords-io/wordpress-plugin/pull/553) Resolve the post ID in `Content::get_content_without_excluded_blocks`.
210 +* [#551](https://github.com/beyondwords-io/wordpress-plugin/pull/551) Track live meta for the Inspect panel Remove button.
211 +* [#550](https://github.com/beyondwords-io/wordpress-plugin/pull/550) Coerce non-string API error messages to avoid a fatal `TypeError`.
212 +* [#543](https://github.com/beyondwords-io/wordpress-plugin/pull/543) Guard a null languages API result in the classic editor voice select.
213 +* [#542](https://github.com/beyondwords-io/wordpress-plugin/pull/542) Surface a `WP_Error` from `get_content()` instead of a fatal `TypeError`.
214 +* [#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).
215 + * The composer constraint now floors at the patched release, so a vulnerable version can no longer be bundled.
223 216
224 -= 4.0.6 =
217 +**Deprecations**
225 218
226 -Release date: 7th September 2023
219 +* Removed the `beyondwords_player_style`, `beyondwords_player_content`, `beyondwords_title_voice_id`, `beyondwords_summary_voice_id` and `beyondwords_disabled` post meta keys.
220 + * Existing values are preserved in the database and only removed on full uninstall; `beyondwords_disabled` is migrated to the new "Embed" setting on upgrade.
221 +* The `beyondwords-*` `<head>` meta tags are now only emitted for the client-side (Magic Embed) integration.
222 +* [#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".
223 + * Posts saved as "Script" are migrated to "Post + script" on upgrade, and keep embedding their script asset.
227 224
228 -**Fixes**
225 +**Compatibility**
229 226
230 -* Always call `setAttributes` for `beyondwordsMarker` in the `editor.BlockEdit` filter. Previously this was only being called when the BeyondWords sidebar panel was open.
231 -* Remove the unwanted `blocks.getSaveContent.props` filter. This was doing nothing because the filter name was incorrect (it was a typo for `blocks.getSaveContent.extraProps` which we don't need).
227 +* Tested up to WordPress 7.0.
228 +* [#515](https://github.com/beyondwords-io/wordpress-plugin/pull/515) PHP 8.5 support.
229 + * Run unit and e2e tests against PHP 8.0 and PHP 8.5 in GitHub Actions.
230 + * Bumped `phpVersion` in wp-env to 8.5.
232 231
233 -= 4.0.5 =
232 +**Codebase Enhancements**
234 233
235 -Release date: 24th August 2023
236 -
237 -**Fixes**
238 -
239 -* Fix reported PHP Warnings by checking that [get_current_screen](https://developer.wordpress.org/reference/functions/get_current_screen/) return value is truthy.
240 -
241 -= 4.0.4 =
242 -
243 -Release date: 17th August 2023
244 -
245 -**Fixes**
246 -
247 -* Fix an intermittent issue where segment markers are not always assigned to blocks. Our `blocks.registerBlockType` filter now matches [the example in the official WordPress docs](https://developer.wordpress.org/block-editor/reference-guides/filters/block-filters/#blocks-registerblocktype).
248 -* Hide the audio player widget (the player docked to the bottom of the screen when you scroll) in WordPress admin screens.
249 -
250 -= 4.0.3 =
251 -
252 -Release date: 4th August 2023
253 -
254 -**Fixes**
255 -
256 -* Cast the return value of [get_the_post_thumbnail_url](https://developer.wordpress.org/reference/functions/get_the_post_thumbnail_url/) to string before sending to the BeyondWords API. This fixes an issue where we were sending boolean `false` as the `image_url` field for posts without a featured image.
257 -
258 -= 4.0.2 =
259 -
260 -Release date: 3rd August 2023
261 -
262 -**Fixes**
263 -
264 -* Prefix `/languages` and `/voices` endpoints with `/organization` to reflect recent changes in API. This fixes the issue where no languages or voices could be found.
265 -
266 -= 4.0.1 =
267 -
268 -Release date: 30th July 2023
269 -
270 -**Fixes**
271 -
272 -* Set minimum supported versions to PHP 7.4 and WordPress 5.8.
273 -* Fix issue where the audio player was disappearing in Classic Editor when the Player UI setting was "Headless" or "Disabled".
274 -* Remove unwanted console logs.
275 -
276 -= 4.0.0 =
277 -
278 -Release date: 26th July 2023
279 -
280 -**Fixes**
281 -
282 -* Fixed broken "Copy" button in Block editor Inspect panel.
283 -
284 -**Improvements**
285 -
286 -* API calls are now made to the new BeyondWords REST API at [api.beyondwords.io](https://api.beyondwords.io).
287 -* Custom languages and voices for your audio. [Docs here](https://docs.beyondwords.io/docs-and-guides/content/connect-cms/wordpress/add-languages?utm_source=wordpress&utm_medium=referral&utm_campaign=&utm_content=plugin).
288 -* Our advanced "Latest" audio player is available. [Docs here](https://docs.beyondwords.io/docs-and-guides/content/connect-cms/wordpress/updating-to-the-latest-player?utm_source=wordpress&utm_medium=referral&utm_campaign=&utm_content=plugin).
289 -* Using "Headless mode" you can take advantage of audio processing and the audio CMS whilst building their own front-end players. [Docs here](https://docs.beyondwords.io/docs-and-guides/content/connect-cms/wordpress/headless-mode?utm_source=wordpress&utm_medium=referral&utm_campaign=&utm_content=plugin).
290 -* The following new filters have been added.
291 - * [beyondwords_body_params](https://docs.beyondwords.io/docs-and-guides/content/connect-cms/wordpress/wordpress-filters/beyondwords_body_params?utm_source=wordpress&utm_medium=referral&utm_campaign=&utm_content=plugin).
292 - * [beyondwords_content_id](https://docs.beyondwords.io/docs-and-guides/content/connect-cms/wordpress/wordpress-filters/beyondwords_content_id?utm_source=wordpress&utm_medium=referral&utm_campaign=&utm_content=plugin)
293 - * [beyondwords_player_script_onload](https://docs.beyondwords.io/docs-and-guides/content/connect-cms/wordpress/wordpress-filters/beyondwords_player_script_onload?utm_source=wordpress&utm_medium=referral&utm_campaign=&utm_content=plugin)
294 - * [beyondwords_player_sdk_params](https://docs.beyondwords.io/docs-and-guides/content/connect-cms/wordpress/wordpress-filters/beyondwords_player_sdk_params?utm_source=wordpress&utm_medium=referral&utm_campaign=&utm_content=plugin)
295 - * [beyondwords_post_audio_enabled_blocks](https://docs.beyondwords.io/docs-and-guides/content/connect-cms/wordpress/wordpress-filters/beyondwords_post_audio_enabled_blocks?utm_source=wordpress&utm_medium=referral&utm_campaign=&utm_content=plugin)
296 - * [beyondwords_project_id](https://docs.beyondwords.io/docs-and-guides/content/connect-cms/wordpress/wordpress-filters/beyondwords_project_id?utm_source=wordpress&utm_medium=referral&utm_campaign=&utm_content=plugin)
297 -
298 -**Breaking changes**
299 -
300 -* `beyondwords_podcast_id` is now stored and retrieved as `beyondwords_content_id`.
301 - * This should not affect most websites, but if your site has custom PHP that uses the `beyondwords_podcast_id` custom field then you need to update your code to prefer `beyondwords_content_id`.
302 - * Existing `beyondwords_podcast_id` post metadata will be updated to `beyondwords_content_id` automatically as each post is queried in WordPress requests.
303 -* For WpGraphQL, `beyondwords.podcastId` was defined as type: `Int`. We have changed the type to `String` to support the new ID format (UUID). Your code may need to be updated to handle this change.
304 -* Removed built-in WPML support (our compatibility unfortunately failed over time). Support for translation plugins can now be achieved using the following WordPress hooks:
305 - * `beyondwords_body_params`
306 - * `beyondwords_project_id`
307 -* Some older deprecated filters have been removed:
308 - * `speechkit_post_types`: Migrate to `beyondwords_post_types`
309 - * `speechkit_post_statuses`: Migrate to `beyondwords_post_statuses`
310 - * `sk_player_before`: Migrate to beyondwords_js_player_html / beyondwords_amp_player_html
311 - * `sk_the_content`: Migrate to `beyondwords_js_player_html` / `beyondwords_amp_player_html`
312 - * `sk_player_after` Migrate to `beyondwords_js_player_html` / `beyondwords_amp_player_html`
313 - * `speechkit_js_player_html` Migrate to `beyondwords_js_player_html`
314 - * `speechkit_amp_player_html` Migrate to `beyondwords_amp_player_html`
315 - * `speechkit_post_player_enabled` Migrate to `beyondwords_post_player_enabled`
234 +* [#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.
235 +* [#591](https://github.com/beyondwords-io/wordpress-plugin/pull/591) Refresh the developer documentation in `doc/` against the v7 codebase.
236 +* [#608](https://github.com/beyondwords-io/wordpress-plugin/pull/608) Fix the intermittent detached-DOM failures in the block editor Cypress specs.
237 +* [#607](https://github.com/beyondwords-io/wordpress-plugin/pull/607) Update two PHPUnit tests left stale by the Script-only Source removal.
238 +* [#602](https://github.com/beyondwords-io/wordpress-plugin/pull/602) Align the player-visibility docs and Cypress specs with the "Embed" setting.
239 +* [#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.
240 +* [#533](https://github.com/beyondwords-io/wordpress-plugin/pull/533) Fix failing Cypress tests for v7.
241 +* [#538](https://github.com/beyondwords-io/wordpress-plugin/pull/538) Remove the unused `updatePostMeta` util from the Inspect panel.
242 +* [#562](https://github.com/beyondwords-io/wordpress-plugin/pull/562) Re-enable Plugin Check on `plugin-check-action` v1.1.7.
243 +* [#560](https://github.com/beyondwords-io/wordpress-plugin/pull/560) Cancel superseded CI runs via a concurrency group.
244 +* [#516](https://github.com/beyondwords-io/wordpress-plugin/pull/516) Remove `environment` from the GitHub workflows.
245 +* [#517](https://github.com/beyondwords-io/wordpress-plugin/pull/517), [#535](https://github.com/beyondwords-io/wordpress-plugin/pull/535) Update GitHub Actions dependencies.
246 +* [#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.
247 +* Various dependency updates to clear Dependabot security warnings.
316 248
317 249 --------
318 250
319 251 [See the previous changelogs here](https://plugins.trac.wordpress.org/browser/speechkit/trunk/changelog.txt).