=== Text to Speech - TTSWP ===
Contributors: mvirik
Donate link: https://ttswp.com/get-started
Tags: text to speech, tts, text to audio, accessibility, text to voice
Requires at least: 6.0
Tested up to: 6.9
Requires PHP: 7.2
Stable tag: 3.2.21
License: GPLv3 or later
License URI: https://www.gnu.org/licenses/gpl-3.0.txt

Text to Speech (TTS) plugin for WordPress with ElevenLabs AI voices, WCAG accessibility, and 10,000 free credits. By Norse Digital Group LLC.

== Description ==

## Add Text to Speech to WordPress in Seconds

**[Text to Speech - TTSWP](https://ttswp.com/)** turns your written content into natural, human-like audio. It makes your website accessible to everyone. Listeners, people with visual impairments, and those with learning differences all benefit.

The plugin is published and operated by **Norse Digital Group LLC**, a Wyoming-registered company (Sheridan, WY, USA). Engineering work is performed by [Mementor Web Design & Digital Marketing Agency AS](https://mementor.no/en/), our Norwegian development partner.

The plugin uses ElevenLabs to generate lifelike speech that sounds human, warm and clear. No setup, API key, or coding is needed. Install it and start converting your WordPress posts into audio right away.

Text to speech keeps visitors on your page longer and raises engagement. Both of these factors can improve your SEO. The plugin follows WCAG 2.1, WCAG 2.2, and ADA accessibility standards.

PRO and Agency adds Speech-to-Text (STT) features. These are useful for transcription, captions, or converting podcasts and video into readable text.

## Key Benefits

* Instant setup with no API keys or external accounts needed. Install and start converting text to speech
* Natural voices powered by ElevenLabs that produce clear, professional narration
* Automatic, mobile-friendly audio player that fits any screen size
* Accessibility ready with ARIA labels and keyboard support for screen readers and assistive devices
* Better engagement and SEO signals as visitors spend more time on your pages
* 10,000 free text-to-speech characters on activation so you can try it at no cost
* Lightweight and built for performance with no impact on page speed or Core Web Vitals
* Speech-to-Text transcription (PRO) to create written transcripts from your audio content

## Why Choose This Text to Speech Plugin

### Simple and Fast
* No API keys, or coding needed. Install, activate, and your audio player is ready in seconds
* Works with default settings so you can start converting text to speech right away

### Natural Voices
* Natural male, female, and multilingual voices that sound clear and professional
* Pick from a wide range of tones and styles to match your brand and audience

### Accessibility and Compliance
* Fully compatible with WCAG 2.1 AA and ADA guidelines for web accessibility
* Helps your website meet legal requirements by offering audio versions of written content

### Theme and Page Builder Compatibility
* Works with any theme or page builder, including Elementor, Gutenberg, Divi, Visual Composer, and all standard WordPress themes
* No conflicts with popular plugins. Designed to fit smoothly into your existing setup

### SEO Optimized

Audio players raise dwell time and send positive accessibility signals. Text to Speech PRO includes AudioObject schema for better search visibility.

## Features

### Free Features
* 10,000 free characters to convert text to audio. Enough to get started without paying
* Natural male and female voices in multiple languages for a professional listening experience
* Automatic player for posts, pages, and WooCommerce products with no manual setup needed
* Flexible player placement - before title, after title, after content, before excerpt, or after excerpt
* Zero-click install. Activate the plugin and your audio player is ready
* Mobile-first player with speed control and download so visitors can listen anywhere
* Accessibility ready with ARIA labels and keyboard control for screen readers and assistive devices
* Audio auto-updates when post content changes. No need to regenerate manually
* Audio Library to browse, search, filter, and manage all generated audio files in one place
* Statistics dashboard to track how many visitors listen to your content
* Shortcode and block support for custom player placement anywhere on your site
* Content filtering with CSS selectors or no-audio class to exclude specific sections from narration
* Built for caching and performance plugins like WP Rocket, LiteSpeed Cache, and W3 Total Cache
* Multisite support for managing text-to-speech across multiple WordPress sites from one network

### PRO & Agency Features
* Sticky Footer Player. A persistent audio player bar pinned to the bottom of the page. Visitors can keep reading while listening. Includes play, pause, seek, volume, speed, and close controls
* Waveform Progress Bar. A visual waveform replaces the standard progress bar. Each post gets a unique pattern. Shows real-time playback progress with accent-colored bars
* Background Opacity. Adjust the sticky footer's background transparency so page content shows through while the player stays accessible
* 600+ voices across 70+ languages to match your audience worldwide
* Premium 44.1 kHz (192 kbps) audio quality for studio-grade narration
* ElevenLabs v2 and Eleven v3 models for the latest and most natural-sounding voice technology
* Speech-to-Text transcription to create written transcripts from audio
* Bulk audio generation to convert multiple posts or pages at once
* WooCommerce product narration. Let customers listen to product descriptions
* Voice cloning with ElevenLabs Voice ID to create a custom brand voice
* Word replacement and pronunciation correction for names, abbreviations, and technical terms
* SSML support for fine-tuned control over speech output
* Custom pauses to add natural breaks between sections, headings, or paragraphs
* AudioObject schema for SEO. Structured data that helps search engines index your audio content
* Custom intro and outro to add branding or disclaimers to every audio file
* WPML and Weglot multi-language voice mapping to assign different voices per language
* Amazon S3 media offload to reduce server load and speed up audio delivery
* Advanced analytics with detailed listening data per post, device, and location
* White-label mode (Agency plan) to remove plugin branding from the backend and the text-to-speech player
* Resell or share our Text-to-Speech plugin (Agency plan) under your own brand and pricing. Offer text-to-speech as a service to your clients and create a recurring revenue stream
* Credit Allocation per Site (Agency plan). Distribute credits across client sites from one account. Control usage per site to manage costs and ensure fair allocation
* Priority support with faster response times from the development team

## How It Works

1. Install and activate the plugin from your WordPress dashboard
2. Publish or update a post or page. Audio is generated from your content automatically
3. A text-to-speech audio player appears on the page with no extra configuration
4. Visitors can play, pause, adjust speed, or download the audio file

## Video Walkthrough

[youtube https://youtu.be/Qn54oJxSDQg?si=il4kEy269JH4cxLm]

Features:
[https://ttswp.com/features](https://ttswp.com/features)

Pricing:
[https://ttswp.com/pricing](https://ttswp.com/pricing)

Documentation and setup guides:
[https://ttswp.com/docs](https://ttswp.com/docs)

## Supported Languages

Compatible with WPML, Polylang, TranslatePress, Weglot, and other translation plugins.

Text to Speech works in 70+ languages. Here are some of the most popular:

* English (US, UK, AU): Text to Speech
* Norwegian: Tekst til tale
* Spanish: Texto a voz
* French: Synthèse vocale
* German: Text-in-Sprache
* Italian: Sintesi vocale
* Portuguese: Texto para fala
* Dutch: Tekst naar spraak
* Polish: Zamiana tekstu na mowę
* Turkish: Metinden sese
* Russian: Преобразование текста в речь
* Arabic: تحويل النص إلى كلام
* Hindi: पाठ से वाक्
* Bengali: টেক্সট টু স্পিচ
* Chinese: 文字转语音
* Japanese: テキスト読み上げ
* Korean: 텍스트 음성 변환
* Thai: แปลงข้อความเป็นเสียง
* Vietnamese: Chuyển văn bản thành giọng nói
* Indonesian: Teks ke suara

## Accessibility and SEO Advantages
* Meet WCAG 2.1 AA and ADA requirements by offering an audio version of written content
* Raise average session time as visitors stay longer when they can listen instead of read
* Help users with dyslexia, ADHD, or visual impairments with a hands-free listening option
* Improve SEO with rich media and structured data that search engines can index and display
* Create inclusive multilingual content that reaches audiences in their preferred language

## Use Cases
* Accessibility and inclusion. Make your website usable for people with reading difficulties or disabilities
* Blogs and news. Let readers listen to articles while on the go
* E-commerce product descriptions. Give shoppers the option to hear product details before buying
* Education. Help students absorb course material through audio learning
* Long-form content. Turn guides, reports, and documentation into easy-to-consume audio
* Multitaskers. Serve visitors who prefer listening while commuting, exercising, or working
* Content creators. Repurpose written content into audio format without extra recording effort

## Other Tools by Norse Digital Group LLC

* Text to Speech - TTSWP: [Text to Speech - TTS](https://mementor.no/en/wordpress-plugins/text-to-speech/)
* BestPris.no: [Best Pris](https://bestpris.no/)
* SEO-Analyse.no: [SEO Analyse](https://seo-analyse.no/)

== Installation ==

## Standard Installation

1. Go to Plugins → Add New in your WordPress admin
2. Search for "Text to Speech - TTSWP"
3. Click Install Now and then Activate
4. Click "Connect Site" on the Overview page to link your site to TTSWP
5. You receive 10,000 free welcome credits instantly
6. Optional: connect your ElevenLabs API key for 10,000 extra free monthly credits
7. Optional: upgrade to Pro or Agency for more credits and features

## Quick Start Guide

1. **Overview** - see your plan, credits, and setup checklist at a glance
2. **Voices** - pick a default voice and language for your audio
3. **Player** - customize colors, size, position, and player label
4. **Content** - choose which post types generate audio and set content rules
5. **Audio Library** - browse, search, and manage all generated audio files
6. **Statistics** - track play counts and listener engagement
7. **Shortcode Generator** - create custom player embeds for any content
8. **Bulk Generation** (Pro) - convert all existing posts to audio at once

== Frequently Asked Questions ==

= Do I need an API key or an ElevenLabs account? =
No. You get 10,000 free welcome credits when you connect your site. No ElevenLabs account is needed. If you want an extra 10,000 free monthly credits, you can optionally connect your own ElevenLabs API key as a fallback.

= What is TTSWP Dashboard? =
It is the TTSWP cloud dashboard where you manage your plan, credits, connected sites, and billing. Connect your WordPress site from the plugin's Overview page with one click.

= What is the difference between Free, Pro and Agency? =
Free includes 10,000 welcome credits and standard voices. Pro adds monthly credits, all voices, Amazon S3 storage, multilingual support, and advanced features. Agency adds unlimited sites, white-label branding, credit allocation per site, and dedicated support.

= Is the text to speech player WCAG compliant? =
Yes. All audio controls include ARIA labels, keyboard navigation, and color-contrast support.

= Which languages does text to speech support? =
All plans support 70+ languages. Pro and Agency unlock 600+ premium voices.

= Does text to speech work with Elementor, Divi, or Gutenberg? =
Yes. It works with all popular page builders and standard WordPress themes.

= Does it work with WooCommerce? =
Yes. You can generate audio for product descriptions, including title, price, stock status, and category. Pro feature.

= Can I bulk-convert existing posts to audio? =
Yes. Upgrade to Pro and use the Bulk Generate tool.

= Will text to speech slow down my site? =
No. The player is lazy-loaded and works with caching plugins like WP Rocket, LiteSpeed Cache, and W3 Total Cache.

= Can I use my own voice? =
Yes. Pro users can enter their custom ElevenLabs Voice ID for voice cloning.

= What happens when I run out of credits? =
Existing audio stays playable. New audio will not generate until you top up credits, your monthly credits renew, or your ElevenLabs API key fallback kicks in.

= Can I manage multiple sites from one account? =
Yes. Connect multiple WordPress sites to your TTSWP account. Agency plans include unlimited sites with per-site credit allocation.

== Screenshots ==
1. Dashboard with an overview of your text-to-speech settings, ready to generate audio with one click
2. Voice and language selector. Choose from natural male and female voices in multiple languages
3. Audio player added to posts automatically with no manual placement needed
4. Word Replacement & Pronunciation Controls
5. Engagement analytics. Track how many visitors listen to your audio content
6. Shortcode and block generator. Place the audio player anywhere on your site
7. Audio settings panel. Configure playback options, voice selection, and content filters
8. White-label branding options. Remove plugin branding from the backend and the player
9. Speech-to-Text transcription interface. Create written transcripts from your audio files

== Changelog ==

= 3.2.21 - 2026-05-18 =
* Maintenance: Refreshed the translation template (languages/text-to-speech-tts.pot) so it includes every translatable string added since 3.2.1. Translators working from the old template were missing roughly a year of new UI text.
* Maintenance: Consolidated duplicate translator comments on the "Resets %s" string so translation tools no longer warn about conflicting hints.

= 3.2.20 - 2026-05-15 =
* Fixed: The Active Bar color set on the Audio Player Customization page was ignored on the front end and the playing progress bar always rendered in the default blue. The inline player JavaScript was overwriting the element style with a hardcoded color on every play and time update; the color now follows the value you pick in the player settings.

= 3.2.19 - 2026-05-14 =
* New: The Documentation page is now a live index of every TTSWP help section, replacing the previous placeholder. Each section card shows the title, a short description, and the current article count, and opens the matching page on ttswp.com/docs in a new tab. Sections are fetched live (cached locally for 12 hours) so new articles and section additions appear without a plugin update.
* New: Added a built-in AI documentation assistant to the Documentation page. Ask questions in natural language and get pointed straight to the right setup steps, feature explanations, or troubleshooting article without browsing the docs manually.

= 3.2.18.1 - 2026-05-14 =
* Fixed: 3.2.18 was published missing two new internal files (the Dashboard widget class and the shared upgrade-features partial), which caused a fatal error on sites that auto-updated to 3.2.18. This patch re-publishes the same release with both files included.

= 3.2.18 - 2026-05-14 =
* New: Added a "Text to Speech — TTSWP Latest" widget to the WordPress Dashboard that shows the latest plugin release notes and the three most recent articles from the TTSWP blog, so you can keep up with new features, accessibility tips, and SEO guides without leaving your admin area. Content refreshes automatically every 12 hours, and you can hide the widget at any time from Screen Options.
* Improved: Free users on the My Plan & Credits page now see the same two-column plan and credits card as paid users, including the full credits meter, monthly reset date, and a clear Upgrade Plan + Top up action row. Replaces the previous slim summary banner.
* Improved: Upgrade plan cards on the My Plan & Credits and Upgrade Plan pages now display in a clean side-by-side grid (Pro Lite → Pro → Agency, with 2 or 3 columns depending on how many upgrade options apply to your current plan) instead of stacking full width, so plans are easier to compare at a glance.
* New: Added an "Every paid plan includes" feature summary section below the plan cards with three grouped cards — Premium Audio, Automation, and Integrations — listing the most useful PRO capabilities so you can see what an upgrade unlocks before committing.
* Changed: In the plugin sidebar under Account, "My Plan & Credits" now appears above "Upgrade Plan" so existing customers reach their plan management page first.

= 3.2.17 - 2026-05-11 =
* New: Added the new Pro Lite annual plan ($29/year) for users who already have an ElevenLabs API key and want every Pro feature without TTSWP monthly credits. Audio is stored locally on your WordPress server instead of TTSWP-managed cloud storage.
* New: The plugin now respects a new "cloud_storage" capability from the SaaS account API. Plans without cloud storage (Pro Lite) display the correct "stores audio locally" status on the Settings page and skip TTSWP-managed S3 upload prompts.
* Improved: The Account page now reflects up-to-date plan names and prices straight from the SaaS billing source of truth, so renames and price changes propagate without a plugin update.
* Changed: Pricing copy across the Account and License pages updated to match the current public pricing on ttswp.com/pricing.

= 3.2.16 - 2026-05-09 =
* New: The plugin Overview page now shows your current plan, credits remaining, and the next monthly reset date for paid and Agency users, so you can see your account status without leaving the main settings screen.
* Fixed: H3 heading blocks no longer break in the Gutenberg block editor. The plugin's admin styles were leaking a global rule that forced every H3 element to render as inline-flex, pushing H3 headings to the far left of the editor canvas. Reported on the WordPress.org support forum.
* Fixed: On the Upgrade page, switching between Monthly and Yearly billing now updates each plan's displayed price. A selector typo in the on-page script was preventing the price update from running.
* Fixed: Restored the visible gap between the player preview card and the settings form on the Audio Player Customization page.
* Improved: Tightened the plugin's admin CSS so its color picker, range slider, and tooltip rules apply only on plugin pages. Previously these rules could affect controls on other admin screens, including the WordPress block editor.
* Updated: Plugin metadata and readme to clearly identify Norse Digital Group LLC as the software publisher.

= 3.2.15 - 2026-05-03 =
* Fixed: Clicking "Upgrade" on a PRO voice in the Voices page no longer opens the legacy Lemon Squeezy checkout modal. Upgrade buttons across the plugin now go straight to the in-plugin billing page.
* Improved: PRO voices are easier to spot in the voice list. The PRO badge on the voice avatar is larger and outlined, the row gets a purple accent, and the upgrade call-to-action is a clearer button with a lock icon.

= 3.2.14 - 2026-05-02 =
* Fixed: On free-plan sites the audio player did not appear after generating audio.
* Fixed: The player's attribution popup text was being read aloud at the start of generated audio.
* Changed: Free-plan audio is now saved to wp-content/uploads/text-to-speech-tts/ (alongside paid-plan and shortcode audio) instead of wp-content/uploads/tts/. Files written by 3.1.0 through 3.2.13 still play via a read fallback, so no manual migration is needed.

= 3.2.13 - 2026-05-01 =
* Fixed: On free-plan sites where audio files are downloaded locally to the uploads/tts/ folder, the player now loads correctly even when post-meta has been cleared. The check that decides whether to load the player on a page now also looks in this folder, completing the filesystem fallback added in 3.2.12.

= 3.2.12 - 2026-04-30 =
* Fixed: Player no longer disappears on posts whose audio was generated before the plugin started saving its post-meta marker, on free-plan sites where automatic generation cannot run, and on sites using Media Offload where the audio file is recorded only in the speeches table. The check that decides whether to load the player on a page now also looks at the speeches table and the audio folder on disk, matching how the player itself locates the audio file.

= 3.2.11 - 2026-04-29 =
* Improved: Player styles and scripts are no longer loaded on posts and pages that have no generated audio. This trims unused CSS and JavaScript from page weight on sites where most posts do not use the audio player.
* Improved: On multilingual sites (Weglot, WPML), the player styles and scripts are now loaded only on language variants of a post that actually have audio. Previously, generating audio for one language caused the player assets to also load on language variants where no audio existed.
* Improved: A short pause is now spoken after every heading (H1 to H6) in the article body, matching the existing pause after the post title. Long articles with multiple sections now sound more natural.
* Developer: When Debug Mode is on and the player script does not load on a page, the console message now explains why (no audio, post type not enabled, or no shortcode) instead of just printing "Player Settings: Not found".

= 3.2.10 - 2026-04-23 =
* Fixed: Fusion Builder posts where body text is wrapped in bold tags (instead of paragraph tags) now generate audio for the whole article. Previously only the call-to-action or FAQ block at the end of such posts was read aloud. Your settings stay the same.

= 3.2.9 =
* New: Optional "Remote Debug Logging" toggle in Advanced settings. When enabled on a site connected to TTSWP, diagnostic events (content lengths, extraction flags, errors) are streamed to the TTSWP support dashboard so issues can be diagnosed without needing access to wp-admin or the server. No content is sent unless the separate "Include Content Samples" toggle is also enabled.

= 3.2.8 - 2026-04-23 =

* Fixed: Posts with a Read More break now generate audio for the full article body, not just the teaser paragraph. Affected Fusion Builder and other page builders that render only the teaser when audio is generated from the post list or via automatic generation. Your settings stay the same.

= 3.2.7 - 2026-04-22 =

* Improved: Smaller plugin package. Your settings stay the same.

= 3.2.6 - 2026-04-22 =

* Improved: Faster admin page loads.
* Improved: Internal cleanup. Removed unused files and code left over from earlier versions. Your settings stay the same.

= 3.2.5 - 2026-04-20 =

* Fixed: Truncate After on the CSS Selectors page now applies when regenerating audio for Weglot languages from the post list.
* Fixed: Regenerating audio now always re-applies your current settings (Truncate After, Include / Exclude Selectors) instead of reusing the text that was extracted on the first generation.
* Improved: When you run out of credits, the plugin shows a clearer "Not enough credits" dialog with Top up and Upgrade buttons, and the actual numbers you need and have left.

= 3.2.4 - 2026-04-20 =

* New: Truncate After setting on the CSS Selectors page. Enter one or more strings (one per line) and audio generation stops at the first match in the page. Useful for cutting off footnotes or reference sections.
* Fixed: Deleting audio now also removes the file from the CDN cache, so listeners stop hearing a deleted track once its CDN entry expires.
* Fixed: Regenerating audio and creating new audio now invalidate the CDN path on every write, so listeners always hear the latest version without waiting for the cache to refresh on its own.

= 3.2.3 - 2026-04-20 =

* Fixed: On the CSS Selectors page, saving the Content Selectors or Blocked Selectors field no longer clears the other field. Both textareas now save together.

= 3.2.2 - 2026-04-20 =

* New: Weglot per-language rows are back in the post / page list. Generate, play, regenerate, or delete audio for each Weglot language straight from the list. Translation happens automatically for destination languages.
* New: The Information button is now available in the Sticky Footer player, not only the inline player.
* Fixed: On the Player settings page, the Sticky Footer preview now updates in real time when you toggle Time, Volume, Speed, Download, Information, and Button background, and when you change Play Icon Size, Font Size, Player Padding, or Margin Bottom.

= 3.2.1 - 2026-04-19 =

* Fixed: Deleting audio from the post list sometimes left the old audio in place after a page refresh. Audio now clears on the first try.
* Improved: The Download button in the post list now opens a save dialog instead of opening the audio file in the browser, even when audio is stored on the CDN.

= 3.2.0 - 2026-04-18 =

* New: When your site isn't connected to TTSWP, a Connect Card now appears at the top of every plugin page. You always see how to get started.
* New: Pages that need a connected site show a greyed-out preview with one Connect button. No more clicking buttons that don't work yet.
* New: Getting Started cards on the Overview page after you connect. Three quick steps: choose a voice, customize the player, generate your first audio. Hide them once you know your way around.
* New: Download button in the TTS column on your posts list. Grab the audio file for any post in one click.
* New: Text to Speech menu in the WordPress admin bar with quick links to Voices, Player, Shortcode Generator, Statistics, Plan & Credits, and Documentation. Visible from both the backend and your site front-end.
* New: Longer single-request limits. Free users can now generate up to 10,000 characters per request, paid users up to 40,000. Turn longer articles into audio in one go.
* Improved: The Overview page still shows the welcome screen (free credits, voice demo, stats, and help links) when your site isn't yet connected.
* Improved: Long audio generation is more reliable. The plugin now waits longer for ElevenLabs to finish, so files that used to time out after 30 seconds complete properly.
* Improved: Clearer errors when audio generation fails. If the voice you picked has been deleted from your ElevenLabs account, or your text is longer than the chosen model accepts, you now get a message that tells you what to do.
* Improved: The Overview page now shows "ElevenLabs key invalid" when your API key stops working, so you know to update it. No more misleading green status pill.
* Improved: ElevenLabs credits on the Overview page now show per-key limits if you've set one (on app.ttswp.com), not the account-wide limit.
* Improved: Security fixes and code cleanup.
* Fixed: Saving Quick Settings sometimes showed a permission error instead of returning to the Overview page.

= 3.1.9 - 2026-04-08 =

* New: Sticky Footer Player (PRO). A persistent audio player bar that stays at the bottom of the page while visitors scroll and read. Includes play, pause, seek, volume, speed control, and download
* New: Waveform Progress Bar (PRO). A unique visual waveform for each post replaces the standard progress bar. Shows playback progress in real time with your chosen accent color
* New: Background Opacity setting for the Sticky Footer Player. Make the player background semi-transparent so page content is visible underneath
* New: Player settings now show a live Sticky Footer preview at the bottom of the admin page when Sticky Footer placement is selected
* New: Progress Bar type selector in Player Settings. Choose between Linear (free) and Waveform (PRO)
* Improved: Upgrade card on the Account page now shows your current plan's credit allocation
* Improved: "Upgrade plan" button replaces "Change tier" on the Account page for clearer messaging
* Improved: Player color settings now update on the frontend immediately after saving (no more stale cached styles)
* Improved: Player icon colors now follow your chosen Accent color setting

= 3.1.8 - 2026-04-07 =

* Fixed: Shortcode player not rendering when audio is stored on cloud (paid plans)
* Fixed: Shortcode audio mapping now persists between sessions for cloud-hosted files

= 3.1.7 - 2026-04-01 =

* New: Locale-aware number normalization — numbers, percentages, and years are now spoken in the correct language (Dutch, German, French, and 25+ languages)
* Fixed: European number formats (e.g. 8,52% and 5.083.173) were mispronounced or read in English
* Fixed: WPML admin language was overriding the plugin's TTS language setting in the Shortcode Generator

= 3.1.6 - 2026-03-31 =

* New: Numbers, currency, and percentages are now converted to spoken words before synthesis (e.g. $22,200 → "twenty-two thousand two hundred dollars", 2% → "two percent")
* Fixed: Shortcode audio generator was missing number normalization, causing TTS to mispronounce amounts
* Fixed: ElevenLabs Playground was sending raw text without any preprocessing

= 3.1.5 - 2026-03-31 =

* Fixed: Audio was being auto-generated on every page visit for paid plan users, regardless of settings
* Fixed: Auto-generation on page visit now correctly respects the "Auto-generate on publish" setting
* Fixed: Credit usage from auto-generation was not logged in the "Credit Usage by Post" table
* Fixed: Failed auto-generation attempts no longer retry on every page load (6-hour cooldown)

= 3.1.4 - 2026-03-31 =

* Removed: Remote telemetry collection and usage tracking to external servers
* Fixed: License page no longer blocked for free plan users
* Fixed: Some posts causing a server error when auto-generation is enabled
* Fixed: Browser console warning about unreachable code in player script

= 3.1.3 - 2026-03-31 =

* New: Full translation support for 20 languages
* Improved: Sidebar menu now matches the redesigned in-app navigation
* Updated: Fresh translation template (.pot) with all current strings

= 3.1.2 - 2026-03-30 =

* Improved: "Site not connected" error now shows a helpful modal with a link to Settings instead of a plain message
* Removed: Telemetry consent modal and remote telemetry collection

= 3.1.1 - 2026-03-29 =

* New: Welcome page with onboarding flow, demo audio player, and step-by-step guide for new users
* Improved: Setup checklist items now link directly to the relevant page
* Improved: Setup checklist correctly detects first audio generated across all languages
* Fixed: Proxy download Content-Type validation and tightened SSRF allowlist
* Fixed: File upload validation in Speech-to-Text restricted to audio formats only
* Fixed: Settings export no longer includes sensitive keys (S3, integrity secret)
* Security: Multiple hardening fixes across AJAX handlers and admin pages

= 3.1.0 - 2026-03-29 =

**TTSWP Cloud Platform**

* New: TTSWP cloud dashboard for managing plans, credits, and connected sites
* New: One-click site connection from the plugin Overview page
* New: Pro and Agency plans with per-site billing and monthly/yearly toggle
* New: Credit top-ups that never expire
* New: ElevenLabs BYOK - connect your personal API key as automatic fallback when plan credits run out, with 10,000 free monthly credits from ElevenLabs
* New: Step-by-step ElevenLabs API key setup guide

**Upgrade Plan Page**

* New: Redesigned Upgrade page showing current plan, Pro, and Agency side by side
* New: Current plan banner with credits remaining and quick links to Manage Plan and Top Up
* New: Feature showcase (Premium Audio, Automation, Integrations) below the plan cards

**Improvements**

* New: Review nudge card on the Overview page after 10+ audio files or 7 days of use
* Improved: Setup checklist now detects ElevenLabs API key from both TTSWP cloud and local plugin settings

= 3.0.2 - 2026-03-25 =

* Fixed: Save settings button not working on all admin pages (White Label, Advanced, Player, Voices, Content, PRO Support)
* Fixed: No confirmation message shown after saving settings on pages with custom form handlers
* Improved: Audio Library now shows a toast notification when audio is successfully regenerated

= 3.0.1 - 2026-03-25 =

* Improved: Generated audio files now use the post title in the filename (e.g. `the-headline-14-en.mp3` instead of `mementor-14-en.mp3`). Existing audio is not affected
* Improved: Comprehensive security hardening - added nonce verification, output escaping, input sanitization, and prepared statements across all admin pages and AJAX handlers
* Improved: Settings import now validates option names against a whitelist to prevent unauthorized writes
* Improved: Complete plugin cleanup on uninstall - all database tables, options, transients, and cron jobs are now properly removed
* Improved: Deactivation now clears all scheduled cron events to prevent orphaned tasks
* Improved: Cron scheduling moved out of class constructors to reduce overhead on frontend page loads
* Improved: Infrequently used options (DB versions, timestamps) no longer autoload on every request
* Improved: All PHP files now include direct access protection
* Improved: Removed duplicate AJAX handler registrations and dead code
* Fixed: Wrong text domain in several translation strings preventing proper localization
* Fixed: Audio player showing a "Generate Audio" button on posts that already have audio
* Fixed: Shortcode player rendering on the frontend even when no audio file exists
* Fixed: Auto-inserted player rendering with a pending state instead of being hidden when no audio is available
* New: Bulk rename in Audio Library - rename old-format filenames (`mementor-ID-lang.mp3`) to use the current post title
* New: Bulk download in Audio Library now creates a single zip file when multiple files are selected
* Fixed: Frontend audio player now uses post meta as the authoritative source for audio URLs, preventing stale references after file renames
* Fixed: Duplicate AudioObject schema markup when multiple player instances exist on a page
* Fixed: Audio Library play counts now include today's events instead of only showing aggregated historical data
* Fixed: Regenerating audio with Media Library enabled deleted the newly saved file due to attachment cleanup race condition
* Fixed: Deleting audio from the post list now properly removes the Media Library attachment and physical file
* Fixed: Post list audio detection and deletion now uses post meta URLs instead of hardcoded filename patterns
* Fixed: Speech builder caching DELETE query results which could mask errors
* Fixed: N+1 database query in statistics page running SHOW TABLES inside a loop
* Fixed: Audio file saving now always uses WP_Filesystem API instead of falling back to raw PHP functions

= 3.0.0 - 2026-03-25 =

**Redesigned Admin Interface**

* New: Sidebar navigation replaces horizontal tab navigation for faster access to all plugin pages
* New: Universal card-based design system with consistent styling across every admin page
* New: Design tokens (CSS custom properties) for colors, spacing, typography, and component styles
* New: SVG speaker icon in the WordPress admin menu and plugin sidebar
* New: Global input styling with improved contrast, visible borders, and purple focus states

**New Pages**

* New: Audio Library page - browse, search, filter, sort, and manage all generated audio files with inline playback and bulk actions (select, delete, download)
* New: Add More Credits page - view available credit tiers with a dedicated sidebar CTA button
* New: Documentation page under System & Help

**Redesigned Pages**

* Redesigned: Voices page - card-based voice list with filters, compact audio settings grid, and copy Voice ID on hover
* Redesigned: Player page - sticky live preview, two-panel controls and colors layout, organized sizing and spacing
* Redesigned: License page - sales page with feature cards and Stripe checkout for free users, streamlined license management for PRO and Agency users
* Redesigned: PRO Support page - support form with info sidebar in a two-column layout
* Redesigned: Statistics, My Stats & Voices, Advanced, Affiliate, and White Label pages - all converted to the new design system

**Other Improvements**

* New: PRO plugin update notification in the sidebar when a new version is available
* New: Review tracking - footer updates after clicking the review link
* New: White Label enhancements - SVG logo upload support and the ability to hide Documentation, Add More Credits, and PRO Support menu items
* Improved: Checkbox styling with purple checkmark on white background
* Improved: Footer with review link and "Built with" branding

= Previous Versions =

Version 2.x and earlier included: WooCommerce product audio, WPML multi-language support, Media Library integration, S3 storage, Weglot support, Elementor compatibility, content extraction improvements, and many bug fixes.

== Upgrade Notice ==

= 3.2.16 =
Plugin metadata and readme updated to clearly identify Norse Digital Group LLC as the software publisher.

= 3.2.14 =
Restores the audio player on free-plan sites and stops the player's attribution popup from being read aloud at the start of generated audio. New free-plan audio is also stored alongside paid-plan audio; files from earlier versions still play via a read fallback.

= 3.2.13 =
Completes the 3.2.12 fix: the player now also loads on free-plan sites whose audio files live in the uploads/tts/ folder.

= 3.2.12 =
Restores the player on legacy posts, free-plan sites, and Media Offload setups where audio existed but the player did not appear after upgrading to 3.2.11.

= 3.2.11 =
Audio now sounds more natural with a short pause after every heading. Player styles and scripts no longer load on pages without audio.

== External Services ==

## ElevenLabs API

Purpose: Converts your text into natural-sounding speech
Data sent: Post text, voice ID, API key (if used)
When: On manual or automatic audio generation
Storage: MP3 files saved locally or on S3
Limits: Free plan includes 10,000 one-time welcome credits. PRO plans start at 50,000 credits per month.
Terms: [https://elevenlabs.io/terms-of-use](https://elevenlabs.io/terms-of-use)
Privacy: [https://elevenlabs.io/privacy-policy](https://elevenlabs.io/privacy-policy)

## TTSWP Cloud Platform (Norse Digital Group LLC)

Handles checkout, subscriptions, and license validation for Pro and Agency plans.
Terms: [https://ttswp.com/terms](https://ttswp.com/terms)
Privacy: [https://ttswp.com/docs/trust/privacy](https://ttswp.com/docs/trust/privacy)

== Translations ==

We're looking for contributors to help translate this plugin. If you can help, we'd love to hear from you. Contact us and we'll guide you through the process.

== Privacy ==

**Data Collection**
This plugin collects usage statistics only if you opt in through the consent dialog in Settings. You can opt out anytime in Settings → Advanced.

**If you opt in, we collect:**

* Feature usage counts (generations, characters)
* Plugin, PHP, and WordPress versions
* Your site domain

**We never collect:**

* Personal information or user data
* Content of your posts or pages
* API keys or passwords

**Other Privacy Information**

* Content text sent for speech synthesis goes to ElevenLabs
* API keys are stored encrypted in your database
* Audio files remain on your server or configured S3 storage
* Full data removal runs on uninstall if enabled in Advanced settings

== Credits ==

Natural voice synthesis by **[ElevenLabs](https://elevenlabs.io)**

Published by **Norse Digital Group LLC**. Engineering by **Mementor Webdesign & Digitalt Markedsføringsbyrå AS** under contract with Norse Digital Group LLC.
