=== Accessibility Audio TTS - Text To Speech for Articles === Contributors: app4youdev Tags: accessibility, audio, text-to-speech, a11y, player Requires at least: 6.0 Tested up to: 7.1 Requires PHP: 7.4 Stable tag: 1.1.0 License: GPLv2 or later License URI: https://www.gnu.org/licenses/gpl-2.0.html Let visitors listen to your WordPress articles with natural ElevenLabs voices. Use your own API key; keep recordings on your server. == Description == **Turn your WordPress articles into audio your visitors can listen to.** Accessibility Audio TTS generates speech with ElevenLabs and adds a player to your posts and pages. Choose a voice and model, generate a recording, and let visitors listen on desktop or mobile. Created and maintained by **Wiktor Słomiński at App4You.dev**. The plugin is free. **Speech generation uses your own ElevenLabs account and its credits or paid plan.** OpenAI is optional and is used only for text preparation when you enable it. There is no plugin subscription or separate Pro edition. = Hear it before you configure it = Use **Live Preview** on this page to open a temporary WordPress site with a ready-to-play English narration sample generated with Eleven v4. You can listen and explore the settings without supplying an API key. The demo uses existing recordings; new audio generation is disabled in the preview. The demo runs in WordPress Playground. Its first load downloads a temporary WordPress environment into your browser. Changes in the demo do not affect your own website. Do not enter real API keys in the demo. = What you can do = * **Add a Listen player to articles:** Generate audio manually or enable automatic processing for selected content types. * **Use your own ElevenLabs account:** Choose supported models and voices available to your account, including Eleven v3 and v4. * **Keep recordings on your server:** Finished audio is stored privately and streamed after a WordPress article-access check. Replaying an existing recording does not generate speech again. * **Update older recordings:** Filter by the recorded model and review a batch before rebuilding it. A working recording remains available until its replacement succeeds. * **Offer accessible controls:** The player supports keyboard navigation, named controls and visible focus. It works on desktop and mobile. * **Prepare text with optional OpenAI assistance:** Enable text optimization with a separate OpenAI API key, or leave it off. * **Choose how to measure listening:** Leave statistics off, count anonymous audio requests, or enable consent-controlled listening events with an optional Google Analytics 4 integration. * **Configure privacy information:** Find adaptable privacy-policy text and a player-related cookie and storage inventory in Privacy & cookies. = Who is it for? = News publishers, bloggers, educational websites and organizations that want an audio version of written articles. Audio can help visitors who prefer listening or find reading difficult. The plugin does not certify a website's WCAG or GDPR compliance. = What does it cost? = * **The WordPress plugin:** Free and open source, with all included features available without a plugin subscription. * **ElevenLabs:** You supply an account and API key. Generation consumes provider credits according to the selected model, voice, text and current plan. Check your [ElevenLabs plan and pricing](https://elevenlabs.io/pricing) before converting a large archive. * **OpenAI:** Optional. If text optimization is enabled, OpenAI bills API usage separately under your OpenAI account. A ChatGPT subscription does not include these API charges. * **Playback:** Playing an already generated recording does not make a new speech-generation request. Your website's normal hosting, storage and bandwidth costs still apply. * **Regeneration:** Creating a replacement recording is a new generation and can consume provider credits again. Start with one short article, listen to the result, and check provider usage before enabling automatic generation or a large batch. == Installation == 1. In WordPress, open Plugins > Add New and search for "Accessibility Audio TTS". Install and activate the plugin. 2. Open **A11y Audio TTS** in the main WordPress admin menu. 3. Enter your **ElevenLabs API key**. The key needs permission to generate speech and read the voices and account information used by the settings screen. Never publish this key in an article or share it with visitors. 4. Choose a model and a voice available to your ElevenLabs account. Select the content types you want to narrate and check that your settings have saved. 5. Open a short post in the editor, generate its audio, and visit the published article to listen. Generating this recording uses your ElevenLabs account. 6. Optionally enable automatic processing for future articles or review existing recordings for a model rebuild. Check provider usage and the queue settings first. OpenAI is not required for speech generation. Configure its separate key only if you want optional text optimization, and explicitly enable that feature. Recordings need a writable private directory outside your site's web root. If your hosting prevents automatic setup, configure ACCESSIBILITY_AUDIO_TTS_PRIVATE_DIR in wp-config.php as described in the plugin's storage notice. Back up your website before changing storage settings. == Frequently Asked Questions == = Is this a free text-to-speech plugin? = The plugin is free, with no separate Pro edition. Creating speech requires your own ElevenLabs account; its plan, credits and usage charges apply separately. Any free allowance comes from the provider and is subject to its current terms. = Do visitors need an ElevenLabs account? = No. Only the site administrator configures the provider account. Visitors listen through the player on your website. = Am I charged every time someone listens? = An existing recording is reused, so playback does not create another ElevenLabs speech-generation request. Generating a new recording or replacing one can consume credits. Hosting and bandwidth costs remain your responsibility. = Do I need ChatGPT or OpenAI? = No. ElevenLabs generates the speech. OpenAI is an optional text-preparation service and requires a separate API key and API billing if enabled. Buying ChatGPT alone does not pay for OpenAI API usage. = Can I try the player without an API key? = Yes. Live Preview contains a pre-generated English sample and lets you explore the settings without a key. It does not generate new audio. To create recordings on your own website, configure your ElevenLabs account. If the preview cannot start in an embedded browser, open it in a standalone browser with WebAssembly and Web Worker support. = Which languages and voices are supported? = Speech languages depend on the selected ElevenLabs model and voice. Choose a compatible model and a voice available under your provider plan. The plugin includes Polish, English, German and Spanish interface translations; interface languages and speech languages are separate settings. = What happens when I change the model? = Changing the default model does not replace existing recordings. Use the generated-recordings list to review and queue a rebuild. New generation can consume credits; the old working recording is retained until replacement succeeds. = Are password-protected articles supported? = Playback checks WordPress access before serving private audio. Sending restricted article text to cloud providers is off by default and requires an explicit administrator setting. Review provider contracts and privacy obligations before enabling it. = Does the player work offline? = Recordings require an online access check. Automatic Service Worker registration is disabled; the player removes its legacy browser caches where browser permissions allow. = Does installing this plugin make my site WCAG or GDPR compliant? = No. The plugin provides accessible player controls, access-controlled audio and privacy tools. Overall compliance also depends on your theme, content, configuration, consent integration, provider agreements and legal obligations. The supplied policy text is guidance based on the EU GDPR, not a guarantee of compliance, including with national law. = How do listening statistics work? = Statistics are off by default. Anonymous mode counts aggregate audio requests without plugin listener cookies or persistent listener identifiers; requests are not unique people or confirmed completed listens. Consented mode records aggregate listening events only after your site's consent integration provides the required signal. Optional GA4 forwarding belongs to consented mode and requires your own analytics setup. Hosting access logs and other site tracking must be assessed separately. = Does it work on mobile? = The player and settings adapt to mobile screens. Check the screenshots and test the preview on your target devices. Compatibility with your own theme and other plugins should be verified on staging. == Screenshots == 1. A real article with the audio player and a ready-to-play Eleven v4 English narration sample. 2. Configure your own ElevenLabs API key, speech model and voice in the WordPress settings. 3. Review existing recordings, their speech models and the options for a model rebuild. 4. Choose listening-statistics settings and find adaptable privacy and cookie information. 5. The audio player on a narrow mobile screen. == Changelog == = 1.1.0 = * Add Privacy & cookies controls, Polish/English/German/Spanish policy text and a player-related storage inventory. * Require an explicit OpenAI correction switch; request store=false and prevent content previews in logs. * Keep analytics off by default; choose cookie-free aggregate audio requests or consented listening events with optional GA4 integration. * Add fixed retention, WordPress privacy tools and lease-protected permanent-deletion cleanup. * Add Eleven v4, v3 and Flash models with model-specific request controls and text limits. * Record the actual model, voice, generation time and file-bound provenance; preserve these facts in validated backups. * Add reviewed model rebuilds with filters, bounded selections, pinned job settings, cancellation and a durable background processing rate. * Keep working audio during editor regeneration and failed replacements; prevent repeated paid attempts after queue replay. * Store new recordings privately and check article access before streaming audio. * Preserve and secure existing recordings when articles become password protected. * Keep API keys out of the post editor and exported backups; validate complete imports before writing. * Correct partial generation, background controls, REST/CLI jobs, settings saves and keyboard interactions. * Add browser playback, upgrade and security regression tests. * Validate complete MP3 frames and check the final storage directory before paid generation. * Resume legacy audio migration in bounded batches and provide verified data recovery instructions. * Preserve concurrent cost updates, replay pending accounting and limit failed-post retries. * Keep bulk error details visible and correct responsive admin grids and read-only audio controls. = 1.0.0 = * Initial public release * WCAG 2.2 compliant text-to-speech audio player * ElevenLabs and OpenAI TTS provider support * Accessible audio player with keyboard navigation and screen reader support * Service Worker for offline audio caching * Batch and CRON-based audio generation * Multi-language support (50+ languages) * Admin meta box for per-post audio management * Responsive design for all devices * Full internationalization (English, Polish, German, Spanish) == Upgrade Notice == = 1.1.0 = Back up the site before updating. New recordings require a writable private directory outside the web root. Configure ACCESSIBILITY_AUDIO_TTS_PRIVATE_DIR in wp-config.php if automatic setup is unavailable. API keys are excluded from new exports and must be configured separately after restoring. Listening analytics and new cloud processing of restricted posts are off by default. Historical listening identifiers are removed in bounded batches while aggregate counts are preserved. Review Privacy & cookies, configure the consent integration if needed, and check scheduled cleanup before publishing the supplied policy text. = 1.0.0 = Initial release. Install and configure your TTS provider to start generating audio. == External Services == This plugin connects to external third-party services to provide text-to-speech functionality. Below is a list of all external services used: = OpenAI API = Used for optional text preparation before ElevenLabs speech generation. OpenAI is not a speech provider in this plugin. * Data sent: Article title, prepared body text and applicable image descriptions * When: During configured generation only while OpenAI text correction is enabled; a separate explicit key test uses sample text. Disabling correction stops article text processing even if the key remains saved. * Storage: Requests set store=false. Provider abuse-monitoring logs and account-specific retention rules can still apply; this does not enable Zero Data Retention. * Service provider: OpenAI, L.L.C. * Terms of Use: https://openai.com/policies/terms-of-use * Privacy Policy: https://openai.com/policies/privacy-policy = ElevenLabs API = Used for speech synthesis through the administrator's ElevenLabs account. * Data sent: Article title, prepared text, applicable image descriptions and voice/model settings * When: During configured manual, REST/CLI or background generation. Cloud processing of password-protected/non-public posts additionally requires the restricted-content privacy setting. * Service provider: ElevenLabs, Inc. * Terms of Use: https://elevenlabs.io/terms-of-use * Privacy Policy: https://elevenlabs.io/privacy-policy = OpenAI API = Used for optional usage and cost reporting while OpenAI text optimization is enabled and a suitable OpenAI API key has been configured. * Data sent: API key (Authorization header), query parameters (start_time, bucket_width, limit) * When: When loading the admin settings page with cost tracking enabled * Endpoints: https://api.openai.com/v1/organization/usage/completions, https://api.openai.com/v1/organization/costs * Service provider: OpenAI, L.L.C. * Terms of Use: https://openai.com/policies/terms-of-use * Privacy Policy: https://openai.com/policies/privacy-policy == Third-party Libraries == This plugin includes the following third-party JavaScript libraries: = Alpine.js = Lightweight JavaScript framework for UI interactions. * Source: https://github.com/alpinejs/alpine * License: MIT * Version: 3.x = SweetAlert2 = Beautiful, responsive popup library. * Source: https://github.com/sweetalert2/sweetalert2 * License: MIT == Privacy Policy == The compact Privacy & cookies section supplies Polish/English/German/Spanish text to adapt for the site's privacy policy, cookie policy and player-related storage inventory. The same guidance is available in the WordPress Privacy Policy Guide. * Optional analytics is disabled by default. Anonymous mode aggregates audio requests without listener identifiers. Consented listening events and optional GA4 forwarding require a signal from your consent integration; the player remains usable without statistics consent. * New listening statistics are daily aggregates without raw IP, User-Agent, WordPress user ID or PHP session. Historical identifying rows are aggregated and removed in bounded batches, with pending/error status and WordPress personal-data tools for remaining legacy records. * Statistics create no plugin cookies, PHP sessions or localStorage identifiers. WordPress access cookies and a site's consent-manager cookies are documented separately; the inventory is not a whole-site cookie scan. * Local listening aggregates expire after 365 days; managed legacy backups and diagnostics expire after 30 days. Cleanup relies on working scheduled tasks; hosting backups, downloaded exports and provider-side retention require separate policies. * Private audio follows WordPress authorization. Cloud processing of restricted posts is off by default and requires an explicit administrator setting. * The controller remains responsible for the legal basis, notices, rights requests, provider processing agreements and any international transfer safeguards. No unconditional GDPR compliance or legal certification is claimed. == Support == For support, please visit: * Plugin support forum: https://wordpress.org/support/plugin/accessibility-audio-tts-text-to-speech-for-articles/ * Documentation: https://app4you.dev/wcag-2-2-audio-generator-text-to-speech-accessibility/ * Contact: https://app4you.dev/bezplatna-konsultacja/ == Build == All JavaScript and CSS files are included in both uncompressed (readable) and minified forms. The plugin loads only the `.min.js` / `.min.css` versions at runtime; the uncompressed source files are shipped alongside for review and debugging purposes. Asset layout: * `assets/admin/` – admin-panel scripts and stylesheets * `assets/public/` – front-end player scripts and stylesheets * `assets/vendor/` – third-party libraries (Alpine.js, SweetAlert2) with both `.js` and `.min.js` To build from source: 1. Install dependencies: `pnpm install` 2. Build minified assets: `pnpm build` Build tools: Grunt (see gruntfile.js and package.json for configuration). == Contributing == We welcome contributions! Please visit our GitHub repository for development guidelines and to report issue, contact with us: office@app4you.dev == Credits == * Created and maintained by Wiktor Słomiński at App4You.dev * Icons by WordPress Dashicons * Audio processing powered by modern web APIs