Install
The author publishes release zips, so WP-CLI can install straight from GitHub:
wp plugin install https://github.com/jwilson529/post-to-voice/releases/download/1.0.9/post-voice.zipPost Voice turns WordPress posts, pages, and enabled public post types into playable audio with AI text-to-speech providers. It gives editors a Gutenberg sidebar, a classic metabox fallback, transcript support, bulk generation tools, and multiple ways to render audio on the front end.
What the plugin does
With Post Voice, you can:
- generate audio versions of posts, pages, and public custom post types
- choose between ElevenLabs, OpenAI, and Gemini
- manage audio directly inside the editor
- keep multiple generated files for one post and pick which one is active
- generate transcripts alongside audio
- show the audio player with a block, shortcode, or automatic insertion
- queue bulk generation for missing, stale, or all enabled posts
- create one-off audio files from arbitrary text with Quick Generate
Who this is for
Post Voice is for site owners, editors, agencies, and publishers who want written content to also be available as audio without building a custom workflow.
Common use cases:
- blog posts with a built-in listen option
- article pages with transcript downloads
- editorial teams that want audio generation inside Gutenberg
- client sites that need a shortcode or auto-inserted audio player
- one-off narrated content created from raw text
Main features
Editor workflows
- Gutenberg document panel for enabling audio, selecting voices, queueing generation, and reviewing status
- classic editor metabox for compatibility with non-block workflows
- active audio selection when multiple generated files exist
- stale state detection when post content changes after generation
- retry and regenerate controls
Front-end playback
- dynamic Post Voice Player block
[post_voice_audio]shortcode for manual placement- optional automatic insertion into enabled posts
- transcript disclosure and transcript download support
- accessible notices for queued, stale, failed, and transcript-unavailable states
Audio generation
- background queueing instead of blocking page loads
- support for ElevenLabs, OpenAI, and Gemini
- canonical audio state tracking per post
- one-off Quick Generate workflow from the settings screen
- bulk queue generation for enabled post types
Transcript support
- transcript status stored with the post
- transcript generation after successful audio generation
- fallback transcript generation when a provider transcript is unavailable
- transcript rendering in the player
- transcript download from the front end
Requirements
- WordPress 5.0 or newer
- PHP 7.4 or newer
- valid API credentials for the provider you plan to use
Installation
- Upload the plugin to
/wp-content/plugins/post-voice, or install it through the WordPress Plugins screen. - Activate Post Voice.
- Go to Settings > Post to Voice.
- Choose your provider and enter credentials.
- Select which post types should use the plugin.
- Save your settings.
First-time setup
When you first open the settings page, the plugin guides you through onboarding. The basic setup flow is:
- Choose a provider.
- Add the provider API key.
- Select a default model if the provider requires one.
- Select a default voice.
- Enable one or more post types.
- Choose how the front-end player should appear.
Once those steps are complete, editors can start generating audio immediately.
Provider setup
ElevenLabs
Use ElevenLabs when you want access to ElevenLabs voices and models.
Settings used:
post_voice_api_keypost_voice_model_idpost_voice_voice_id
Typical setup:
- Enter the ElevenLabs API key.
- Refresh and choose a model.
- Refresh and choose a voice.
OpenAI
Use OpenAI when you want OpenAI TTS voices for post audio.
Settings used:
openai_api_keypost_voice_voice_id
Voice options exposed in the plugin include:
alloyashballadcoralechosageshimmerverse
Gemini
Use Gemini when you want Google Gemini TTS support.
Settings used:
gemini_api_keypost_voice_gemini_modelpost_voice_voice_id
How editors use it
Gutenberg workflow
- Edit a post in Gutenberg.
- Open the Post Voice document panel.
- Enable audio for the post.
- Pick the voice for that post if needed.
- Click generate or regenerate.
- Wait for the queued job to finish.
- Review transcript status.
- Publish or update the post.
Classic editor workflow
- Edit a post in the classic editor.
- Use the Generate Voice metabox.
- Enable audio and pick a voice.
- Queue generation.
- Select the audio file you want to use.
Managing multiple audio files
If a post has multiple generated files, you can:
- preview them
- choose which one is active
- delete files you no longer want
- copy a shortcode for a specific audio attachment
Transcript workflow
After audio is generated, Post Voice also tracks transcript state. Depending on provider support and fallback behavior, a transcript can be:
- ready
- generating
- stale
- failed
- not generated
When transcript content is available, the player can display it and offer a download.
How audio appears on the site
You have three main rendering options.
1. Gutenberg block
Insert the Post Voice Player block into the post content. This is the preferred block-editor placement method.
2. Shortcode
Use the shortcode anywhere shortcode output is allowed:
[post_voice_audio]
[post_voice_audio post_id="123"]
[post_voice_audio audio_id="456" view="compact"]
3. Automatic insertion
Enable Post Voice on a post type and allow the plugin to append the player automatically on the front end.
Settings overview
General behavior
The settings screen lets you control:
- active provider
- provider credentials
- default model and voice
- enabled post types
- default player view
- whether download links are shown
- whether lazy generation is enabled
- whether plugin logging is enabled
Quick Generate
Quick Generate creates audio from plain text without attaching it to a normal post workflow.
Use it when you want:
- a quick narrated announcement
- a standalone clip
- sample audio for testing voices
Quick Generate files are stored on a draft post titled One-Off Generated Audio.
Bulk Queue Generation
Bulk Queue Generation helps when you need to process many posts.
You can queue:
missingto generate posts without audio or with failed generationsstaleto regenerate posts whose content changed after generationallto regenerate everything on enabled post types
What the plugin stores
Options
post_voice_voice_providerpost_voice_api_keypost_voice_model_idpost_voice_voice_idpost_voice_enabled_post_typespost_voice_default_viewpost_voice_disable_downloadsopenai_api_keygemini_api_keypost_voice_gemini_modelpost_voice_modelspost_voice_voicespost_voice_provider_modelspost_voice_provider_voicespost_voice_enable_loggingpost_voice_lazy_generate
Post meta
_post_voice_generate_post_voice_voice_id_post_voice_audio_files_post_voice_selected_audio_post_voice_audio_state_post_voice_transcript_post_voice_generation_request
Attachment meta
_post_voice_voice_id_post_voice_provider
REST API
The plugin exposes a REST surface used by the editor UI and admin workflows:
GET /post-voice/v1/posts/<id>/audio-stateGET /post-voice/v1/posts/<id>/generationPOST /post-voice/v1/posts/<id>/generationPOST /post-voice/v1/posts/<id>/generation/retryPOST /post-voice/v1/posts/<id>/audio-selectionGET /post-voice/v1/posts/<id>/transcript
Troubleshooting
Audio stays queued
If generation remains queued for too long, the plugin now includes stale-queue recovery in authenticated admin polling. In normal use, queued generation should either finish or surface a real provider error instead of spinning indefinitely.
No voices are available
Check that:
- the correct provider is selected
- the provider API key is saved
- the provider model and voice selections were refreshed if applicable
A transcript does not appear
Check transcript state in Gutenberg or the metabox. A transcript may be pending, stale, failed, or unavailable depending on the generation result and provider support.
Screenshots
- Settings Page:
assets/settings.png - Meta Box in Post Editor:
assets/metabox.png - Front-end Display:
assets/frontend.png
Changelog
1.0.9
- added Gutenberg document controls and a dynamic Post Voice Player block
- added background generation queueing, transcript generation, and transcript downloads
- added canonical audio state tracking, stale detection, and bulk queue generation
- added Gemini support and improved provider normalization across the plugin
- improved packaging, test coverage, and front-end accessibility states
1.0.8
- adjusted update process
1.0.5
- added tabbed navigation for settings, generated audio files, and quick generation
- introduced Quick Generate for standalone audio creation
- implemented dynamic loading for audio file data via AJAX
- enhanced settings and management UI
- added copy-shortcode functionality
1.0.0
- initial release
License
GPLv2 or later. See LICENSE.txt.
Releases
1 release. Each count is every asset in that release; expand a row for the breakdown.