Como Transformar Posts do WordPress em Áudio Automaticamente [2026]

7 min de leitura
Transformar posts WordPress em áudio automaticamente

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_post para 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:

  1. Todo novo post publicado entra automaticamente na fila de geração de áudio
  2. O áudio é gerado em segundos com voz neural em português
  3. O player aparece automaticamente no topo do artigo
  4. 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 →