| @@ -1,261 +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.2.4 | |
| 7 | -Requires PHP: 7.4 | |
| 8 | -Requires at least: 5.8 | |
| 9 | -Tested up to: 6.3 | |
| 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 | |
| 10 | 10 | License: GPLv2 or later |
| 11 | 11 | License URI: http://www.gnu.org/licenses/gpl-2.0.html |
| 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 | -> — 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 — 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 — 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 — 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.2.4 = | |
| 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: 15th November 2023 | |
| 87 | += Can we use our own voices? = | |
| 86 | 88 | |
| 87 | -**Fixes** | |
| 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 | -* Ensure the `$content` param of `Beyondwords\Wordpress\Core\Player\Player::hasCustomPlayer` is a string before using `strpos`. | |
| 91 | +You can also choose a premade voice or generate a voice from a prompt. | |
| 90 | 92 | |
| 91 | -= 4.2.3 = | |
| 93 | += Can we monetize the audio? = | |
| 92 | 94 | |
| 93 | -Release date: 2nd November 2023 | |
| 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. | |
| 94 | 96 | |
| 95 | -**Fixes** | |
| 97 | += Can we publish the audio as a podcast? = | |
| 96 | 98 | |
| 97 | -* 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. | |
| 99 | +Yes. BeyondWords lets you create podcast feeds for services such as Spotify and Apple Podcasts. | |
| 98 | 100 | |
| 99 | -= 4.2.2 = | |
| 101 | += Does it work with Elementor and other page builders? = | |
| 100 | 102 | |
| 101 | -Release date: 27th October 2023 | |
| 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. | |
| 102 | 104 | |
| 103 | -**Fixes** | |
| 105 | +== Changelog == | |
| 104 | 106 | |
| 105 | -* 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. | |
| 106 | -* 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. | |
| 107 | += 7.2.0 = | |
| 107 | 108 | |
| 108 | -= 4.2.1 = | |
| 109 | +Release date: 25th September 2026 | |
| 109 | 110 | |
| 110 | -Release date: 12th October 2023 | |
| 111 | - | |
| 112 | 111 | **Enhancements** |
| 113 | 112 | |
| 114 | -* Prevent player analytics events from being recorded in WordPress admin by setting the `{ analyticsConsent: 'none' }` param for admin players. | |
| 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. | |
| 115 | 114 | |
| 116 | -= 4.2.0 = | |
| 117 | - | |
| 118 | -Release date: 10th October 2023 | |
| 119 | - | |
| 120 | -**Enhancements** | |
| 121 | - | |
| 122 | -* Add `[beyondwords_player]` shortcode. See our "WordPress shortcode" docs at [https://docs.beyondwords.io/docs-and-guides/content/connect-cms/wordpress]. | |
| 123 | - | |
| 124 | 115 | **Fixes** |
| 125 | 116 | |
| 126 | -* Ensure an array is always returned for `PlayerStyle::getCachedPlayerStyles()` to prevent PHP warnings. | |
| 127 | -* For AMP content, the player is no longer auto-prepended if a custom player is found in the content. | |
| 128 | -* Clean up 'beyondwords_player_style' option on plugin uninstall. | |
| 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. | |
| 129 | 121 | |
| 130 | -= 4.1.2 = | |
| 122 | +**Codebase Enhancements** | |
| 131 | 123 | |
| 132 | -Release date: 21st September 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. | |
| 133 | 126 | |
| 134 | -**Enhancements** | |
| 127 | += 7.1.0 = | |
| 135 | 128 | |
| 136 | -* Added "Large" option into "Player style" plugin setting. | |
| 129 | +Release date: 4th September 2026 | |
| 137 | 130 | |
| 138 | -= 4.1.1 = | |
| 139 | - | |
| 140 | -Release date: 15th September 2023 | |
| 141 | - | |
| 142 | 131 | **Enhancements** |
| 143 | 132 | |
| 144 | -* Tested up to WordPress 6.3. | |
| 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. | |
| 145 | 135 | |
| 146 | -= 4.1.0 = | |
| 147 | - | |
| 148 | -Release date: 15th September 2023 | |
| 149 | - | |
| 150 | -**Enhancements** | |
| 151 | - | |
| 152 | -* "Player style" support. | |
| 153 | - * A "Player style" setting has been added to the plugin settings screen where you can assign the default player style for your audio players. | |
| 154 | - * The default style can be overridden for each post on the post edit screen. | |
| 155 | - * A `beyondwords_player_styles` filter is available so you can modify the options of the "Player style" select boxes in WordPress admin. | |
| 156 | - * We are currently beta testing a video. To discuss enabling this for your project please contact [[email protected]](mailto:[email protected]). | |
| 157 | - * For more information on the supported styles see `playerStyle` at [https://github.com/beyondwords-io/player/blob/main/doc/player-settings.md]. | |
| 158 | -* "Delete audio" option added into "Bulk actions". | |
| 159 | - | |
| 160 | 136 | **Fixes** |
| 161 | 137 | |
| 162 | -* Fixed the "Remove" button for the Inspect panel in Classic Editor. | |
| 163 | -* BeyondWords errors now show in the Classic Editor metabox. | |
| 164 | -* The "Language" and "Voice" selectors now show in the Classic Editor metabox. | |
| 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. | |
| 165 | 145 | |
| 166 | -= 4.0.6 = | |
| 146 | +**Deprecations** | |
| 167 | 147 | |
| 168 | -Release date: 7th 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. | |
| 169 | 150 | |
| 170 | -**Fixes** | |
| 151 | +**Compatibility** | |
| 171 | 152 | |
| 172 | -* Always call `setAttributes` for `beyondwordsMarker` in the `editor.BlockEdit` filter. Previously this was only being called when the BeyondWords sidebar panel was open. | |
| 173 | -* 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). | |
| 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. | |
| 174 | 155 | |
| 175 | -= 4.0.5 = | |
| 156 | +**Codebase Enhancements** | |
| 176 | 157 | |
| 177 | -Release date: 24th August 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. | |
| 178 | 164 | |
| 179 | -**Fixes** | |
| 165 | += 7.0.0 = | |
| 180 | 166 | |
| 181 | -* Fix reported PHP Warnings by checking that [get_current_screen](https://developer.wordpress.org/reference/functions/get_current_screen/) return value is truthy. | |
| 167 | +Release date: 12th August 2026 | |
| 182 | 168 | |
| 183 | -= 4.0.4 = | |
| 169 | +**Enhancements** | |
| 184 | 170 | |
| 185 | -Release date: 17th August 2023 | |
| 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. | |
| 186 | 196 | |
| 187 | 197 | **Fixes** |
| 188 | 198 | |
| 189 | -* 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). | |
| 190 | -* Hide the audio player widget (the player docked to the bottom of the screen when you scroll) in WordPress admin screens. | |
| 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 & Sons` in the BeyondWords dashboard. | |
| 201 | +* [#612](https://github.com/beyondwords-io/wordpress-plugin/pull/612) Fix tags with an ampersand showing as `r&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. | |
| 191 | 216 | |
| 192 | -= 4.0.3 = | |
| 217 | +**Deprecations** | |
| 193 | 218 | |
| 194 | -Release date: 4th August 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. | |
| 195 | 224 | |
| 196 | -**Fixes** | |
| 225 | +**Compatibility** | |
| 197 | 226 | |
| 198 | -* 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. | |
| 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. | |
| 199 | 231 | |
| 200 | -= 4.0.2 = | |
| 232 | +**Codebase Enhancements** | |
| 201 | 233 | |
| 202 | -Release date: 3rd August 2023 | |
| 203 | - | |
| 204 | -**Fixes** | |
| 205 | - | |
| 206 | -* 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. | |
| 207 | - | |
| 208 | -= 4.0.1 = | |
| 209 | - | |
| 210 | -Release date: 30th July 2023 | |
| 211 | - | |
| 212 | -**Fixes** | |
| 213 | - | |
| 214 | -* Set minimum supported versions to PHP 7.4 and WordPress 5.8. | |
| 215 | -* Fix issue where the audio player was disappearing in Classic Editor when the Player UI setting was "Headless" or "Disabled". | |
| 216 | -* Remove unwanted console logs. | |
| 217 | - | |
| 218 | -= 4.0.0 = | |
| 219 | - | |
| 220 | -Release date: 26th July 2023 | |
| 221 | - | |
| 222 | -**Fixes** | |
| 223 | - | |
| 224 | -* Fixed broken "Copy" button in Block editor Inspect panel. | |
| 225 | - | |
| 226 | -**Improvements** | |
| 227 | - | |
| 228 | -* API calls are now made to the new BeyondWords REST API at [api.beyondwords.io](https://api.beyondwords.io). | |
| 229 | -* 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). | |
| 230 | -* 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). | |
| 231 | -* 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). | |
| 232 | -* The following new filters have been added. | |
| 233 | - * [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). | |
| 234 | - * [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) | |
| 235 | - * [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) | |
| 236 | - * [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) | |
| 237 | - * [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) | |
| 238 | - * [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) | |
| 239 | - | |
| 240 | -**Breaking changes** | |
| 241 | - | |
| 242 | -* `beyondwords_podcast_id` is now stored and retrieved as `beyondwords_content_id`. | |
| 243 | - * 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`. | |
| 244 | - * Existing `beyondwords_podcast_id` post metadata will be updated to `beyondwords_content_id` automatically as each post is queried in WordPress requests. | |
| 245 | -* 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. | |
| 246 | -* Removed built-in WPML support (our compatibility unfortunately failed over time). Support for translation plugins can now be achieved using the following WordPress hooks: | |
| 247 | - * `beyondwords_body_params` | |
| 248 | - * `beyondwords_project_id` | |
| 249 | -* Some older deprecated filters have been removed: | |
| 250 | - * `speechkit_post_types`: Migrate to `beyondwords_post_types` | |
| 251 | - * `speechkit_post_statuses`: Migrate to `beyondwords_post_statuses` | |
| 252 | - * `sk_player_before`: Migrate to beyondwords_js_player_html / beyondwords_amp_player_html | |
| 253 | - * `sk_the_content`: Migrate to `beyondwords_js_player_html` / `beyondwords_amp_player_html` | |
| 254 | - * `sk_player_after` Migrate to `beyondwords_js_player_html` / `beyondwords_amp_player_html` | |
| 255 | - * `speechkit_js_player_html` Migrate to `beyondwords_js_player_html` | |
| 256 | - * `speechkit_amp_player_html` Migrate to `beyondwords_amp_player_html` | |
| 257 | - * `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. | |
| 258 | 248 | |
| 259 | 249 | -------- |
| 260 | 250 | |
| 261 | 251 | [See the previous changelogs here](https://plugins.trac.wordpress.org/browser/speechkit/trunk/changelog.txt). |