Como Transformar Posts do WordPress em Áudio Automaticamente [2026]
Transformar posts WordPress em áudio não precisa ser manual. Com a configuração certa, cada artigo publicado ganha automaticamente uma versão em áudio — sem intervenção, sem trabalho extra para o editor, sem custo por post.
O Fluxo Ideal: Publicar = Áudio Pronto
O objetivo é um fluxo onde o editor simplesmente publica o artigo e o áudio está disponível em minutos, automaticamente. Isso é possível combinando:
- Hook
save_postpara detectar publicação ou atualização - Fila de geração assíncrona (via WP-Cron ou fila de jobs)
- API de TTS neural para conversão do texto
- Upload automático para CDN
- Salvamento da URL de áudio como meta do post
Opção 1: Plugin VoiceXpress (Automatização Completa)
O VoiceXpress implementa esse fluxo completo automaticamente. Após a instalação:
- Todo novo post publicado entra automaticamente na fila de geração de áudio
- O áudio é gerado em segundos com voz neural em português
- O player aparece automaticamente no topo do artigo
- Se o post for editado, o áudio é regenerado automaticamente
Para o acervo existente, o painel de configurações do VoiceXpress tem uma função de geração em lote que converte todos os posts publicados de uma vez.
Opção 2: Implementação Própria com WP-Cron
Para desenvolvedores que querem controle total, aqui está a estrutura básica de uma implementação própria:
// 1. Detectar publicação e agendar geração
add_action('publish_post', function($post_id) {
// Verificar se ainda não tem áudio ou se o conteúdo mudou
$hash_atual = md5(get_post_field('post_content', $post_id));
$hash_salvo = get_post_meta($post_id, '_tts_content_hash', true);
if ($hash_atual !== $hash_salvo) {
wp_schedule_single_event(time(), 'gerar_audio_post', [$post_id]);
}
});
// 2. Processar a geração
add_action('gerar_audio_post', function($post_id) {
$post = get_post($post_id);
// Limpar HTML e preparar texto
$texto = wp_strip_all_tags($post->post_content);
$texto = html_entity_decode($texto, ENT_QUOTES, 'UTF-8');
// Chamar API de TTS
$resposta = wp_remote_post('https://api.voicexpress.app/v1/tts', [
'body' => json_encode([
'text' => $texto,
'voice' => 'pt-BR-Neural-F',
]),
'headers' => [
'Content-Type' => 'application/json',
'Authorization' => 'Bearer ' . get_option('voicexpress_api_key'),
],
]);
if (!is_wp_error($resposta)) {
$dados = json_decode(wp_remote_retrieve_body($resposta), true);
// Salvar URL do áudio e hash do conteúdo
update_post_meta($post_id, '_tts_audio_url', $dados['audio_url']);
update_post_meta($post_id, '_tts_content_hash', md5($post->post_content));
}
});
// 3. Inserir player no conteúdo
add_filter('the_content', function($content) {
if (!is_single()) return $content;
$audio_url = get_post_meta(get_the_ID(), '_tts_audio_url', true);
if (!$audio_url) return $content;
$player = '<div class="tts-player" role="region" aria-label="Versão em áudio deste artigo">
<p class="tts-label">🎧 Ouça este artigo</p>
<audio controls preload="none">
<source src="' . esc_url($audio_url) . '" type="audio/mpeg">
Seu navegador não suporta reprodução de áudio.
</audio>
</div>';
return $player . $content;
});
Tratamento de Conteúdo Especial
Antes de enviar o texto para a API de TTS, é importante filtrar ou transformar:
- Shortcodes WordPress: use
strip_shortcodes()para remover shortcodes que não devem ser lidos - Código e pré-formatação: remova blocos
<pre>e<code>(código não deve ser lido) - URLs: substitua URLs brutas por texto descritivo ou remova
- Tabelas: converta tabelas em texto narrativo ou pule-as
function preparar_texto_para_tts($post_content) {
// Remover shortcodes
$text = strip_shortcodes($post_content);
// Remover blocos de código
$text = preg_replace('/<pre[^>]*>.*?<\/pre>/s', '', $text);
$text = preg_replace('/<code[^>]*>.*?<\/code>/s', '', $text);
// Remover todos os outros tags HTML
$text = wp_strip_all_tags($text);
// Decodificar entidades HTML
$text = html_entity_decode($text, ENT_QUOTES, 'UTF-8');
// Limpar espaços múltiplos e quebras de linha excessivas
$text = preg_replace('/\s+/', ' ', $text);
return trim($text);
}
Geração em Lote para Posts Existentes
Para converter o acervo existente, use WP-CLI ou um script admin com paginação para evitar timeout:
// Script de geração em lote (executar via WP-CLI ou painel admin)
$args = [
'post_type' => 'post',
'post_status' => 'publish',
'posts_per_page' => 10,
'paged' => $pagina_atual,
'meta_query' => [[
'key' => '_tts_audio_url',
'compare' => 'NOT EXISTS',
]],
];
$posts = get_posts($args);
foreach ($posts as $post) {
wp_schedule_single_event(time(), 'gerar_audio_post', [$post->ID]);
}
Automatize Sem Código
O VoiceXpress faz tudo isso automaticamente — publicou, virou áudio. Sem WP-Cron personalizado, sem APIs manuais.
Começar Agora →