Texto a voz en sitios WPML: lo que realmente funciona

12 min de lectura 17 min de escucha
Texto a voz en sitios WPML: lo que realmente funciona

Si tienes un sitio con WPML y quieres que cada traducción tenga su propia narración en la voz adecuada, el plugin que elijas debe hacer tres cosas bien: leer el post traducido, generar un archivo de audio separado por idioma y detectar el idioma activo dentro de las llamadas AJAX. La mayoría de los plugins de texto a voz fallan en alguno de esos puntos. Texto a Voz - TTSWP fue desarrollado para resolver los tres.

Este artículo es el complemento práctico de nuestra guía de Weglot. El enfoque técnico es el opuesto, así que empezamos explicando por qué.

WPML guarda las traducciones como posts reales. Weglot, no.

WPML y Weglot resuelven el multilingüismo en WordPress de formas muy distintas, y esa diferencia determina lo que un plugin de texto a voz necesita hacer.

WPML crea un registro de post separado para cada traducción. La versión en inglés de un artículo vive en wp_posts con un ID. La versión en español vive en la misma tabla con un ID diferente. WPML los vincula a través de la tabla icl_translations. El texto traducido es texto real en la base de datos, editado por una persona o por el motor de traducción automática de WPML.

Weglot funciona al revés. La base de datos solo contiene el original. Las traducciones se generan en tiempo real y se inyectan en el HTML de salida antes de que la página llegue al navegador. Un plugin que lee desde get_post() en un sitio con Weglot siempre ve el idioma de origen.

Para el texto a voz, esto lo cambia todo. En WPML, leer el contenido del post desde la base de datos es correcto. El texto traducido ya está ahí. Los fallos tienen que ver con qué post lee el plugin, qué idioma cree que está activo y si almacena uno o varios archivos de audio.

Diagrama que compara el modelo de almacenamiento por posts separados de WPML con la traducción en tiempo real de Weglot, y sus implicaciones para los archivos de audio TTS en cada modelo
WPML guarda cada traducción como un post real en la base de datos. Weglot traduce en tiempo real. Los dos modelos obligan a estrategias de texto a voz diferentes.

Los cuatro fallos más comunes en plugins de texto a voz para WPML

Probamos varias configuraciones en un sitio de pruebas WPML multilingüe. Los mismos cuatro problemas aparecieron una y otra vez. Si tu plugin actual tiene alguno de ellos, el audio que escuchan tus visitantes no es el que crees que publicaste.

1. Audio en el idioma equivocado por un fallo en la detección de idioma en AJAX

Este es el fallo silencioso más peligroso. La mayoría de los reproductores de texto a voz solicitan el archivo de audio o la URL de streaming mediante una petición admin-ajax o REST después de que carga la página. Dentro de esa petición, WordPress ha perdido el contexto de la URL del front-end. El plugin le pregunta a WPML «¿en qué idioma estamos?» y recibe una respuesta incorrecta.

La causa más frecuente es la antigua constante ICL_LANGUAGE_CODE. Se define una sola vez al inicio de la petición y refleja el idioma que WPML detectó al arrancar. Durante una llamada AJAX iniciada desde una página en español, esa constante suele devolver el idioma predeterminado, no el español. El plugin genera entonces audio en inglés para un artículo en español, o carga un archivo en inglés en caché y lo reproduce en el reproductor de la página en español.

La solución correcta es usar los filtros de tiempo real de WPML. El filtro wpml_current_language devuelve el idioma activo en el momento en que se consulta. El hook wpml_post_language_details devuelve el idioma al que pertenece un post concreto, lo que es aún más seguro porque vincula el audio al ID del post y no al estado de la petición.

Cómo detectarlo como lector: abre un artículo traducido, pulsa reproducir y escucha el primer segundo. Si oyes una voz en inglés en una página que no está en inglés, tu plugin está usando la ruta de detección de idioma incorrecta.

2. Un solo archivo de audio compartido entre todas las traducciones

Algunos plugins generan el audio cuando se publica el post original y asocian ese mismo archivo a todas las traducciones. Es rápido y barato. También es incorrecto. El lector en español recibe narración en inglés, o una voz sintética que no encaja con la página que está leyendo.

Como las traducciones de WPML son posts separados con IDs distintos, el comportamiento correcto es generar un nuevo archivo de audio por cada post traducido. Cada archivo se almacena asociado a su propio ID de post y solo se sirve a esa traducción. TTSWP sigue este modelo y usa el ID del post, no el ID del original, como clave de caché.

3. La misma voz para todos los idiomas

Un artículo en francés narrado por una voz entrenada en inglés suena mal aunque las palabras sean correctas. Las voces de ElevenLabs llevan el acento y la prosodia de sus datos de entrenamiento. Una voz entrenada en inglés americano leerá el francés con acento americano, a menos que asignes una voz que se corresponda con el idioma de destino.

TTSWP permite asignar una voz de ElevenLabs a cada idioma de WPML. La traducción al español usa una voz entrenada en español, la traducción al alemán usa una voz en alemán, y así sucesivamente. Consulta la documentación sobre asignación de voces por idioma para la configuración exacta.

4. Esquema de datos que no declara el idioma del audio

Este es el detalle AEO que la mayoría de los plugins ignoran. Los datos estructurados de AudioObject deben incluir una propiedad inLanguage. El valor debe ser una etiqueta IETF BCP 47 (es, de, nb-NO) que coincida con el hreflang de la página.

Un valor inLanguage correcto da a los motores de búsqueda y a las herramientas de IA una señal clara y legible por máquinas sobre el idioma del audio. Refuerza la señal hreflang que ya está en la página. Cuando falta ese esquema, o todas las traducciones comparten el mismo valor solo en inglés, esa señal desaparece y los sistemas que trabajan por idioma no pueden distinguir las versiones. Explicamos cómo tratan los motores de IA el contenido de audio en nuestra guía sobre AEO y audio.

Cómo elegir el modelo de ElevenLabs adecuado para la cobertura de WPML

ElevenLabs ofrece varios modelos, y no todos cubren los mismos idiomas. Si WPML sirve un idioma que ElevenLabs no soporta en el modelo que eliges, no podrás narrar esa traducción correctamente.

La cobertura actual a fecha de 2026:

  • Multilingual v2 admite 29 idiomas, entre ellos inglés, español, francés, alemán, italiano, portugués, neerlandés, polaco, sueco, danés, finlandés, turco, árabe, hindi, japonés, coreano y chino.
  • Flash v2.5 admite 32 idiomas: todos los de v2 más húngaro, noruego y vietnamita, con una latencia de modelo de aproximadamente 75 ms.
  • Eleven v3 admite 74 idiomas, la cobertura más amplia de todos los modelos. Tiene una restricción que supera a sus ventajas adicionales: no está diseñado para uso en tiempo real. ElevenLabs lo indica expresamente. El modelo es más grande y usa un códec de voz de mayor fidelidad, por lo que la generación tarda más. Para casos de uso en tiempo real o conversacionales, ElevenLabs recomienda Flash v2.5.

Para un sitio WPML con una traducción al noruego, Multilingual v2 no la cubrirá. Flash v2.5 sí. Para un sitio que necesita un idioma que solo admite v3, aceptas mayor latencia de generación a cambio de cobertura. TTSWP enruta cada idioma a la voz que elijas, así que puedes combinar modelos según sea necesario.

Cómo comprobar si tu plugin de texto a voz realmente funciona con WPML

No necesitas revisar código para verificarlo. Cinco minutos en el navegador te dicen lo que está pasando.

  1. Cambia de idioma. Abre el artículo original y luego cambia a una traducción usando el selector de idioma de WPML. Comprueba que la URL cambia (por ejemplo a /es/) y que el slug del post es el slug traducido.
  2. Pulsa reproducir y escucha. La voz debe coincidir con el idioma de la página. Una voz en inglés en una página en español significa que el plugin falló en el primer punto.
  3. Inspecciona la URL del audio. Haz clic derecho en el reproductor y copia la fuente del audio. Compárala con la URL de audio del artículo original. Si ambas URLs son idénticas en todos los idiomas, el plugin está usando un solo archivo.
  4. Ve al código fuente de la página y busca AudioObject. Busca un campo inLanguage. Debe ser igual al código del idioma de la página. Si falta o siempre es en, el esquema está mal.
  5. Revisa el hreflang. El inLanguage del audio debe coincidir con el hreflang de la página. Las discrepancias confunden a la búsqueda con IA y rompen la citación por idioma.

Haz esa comprobación antes de instalar nada. Funciona con cualquier plugin de texto a voz, no solo con TTSWP.

Cómo es una configuración correcta de texto a voz con WPML

Esto es lo que recomendamos en un sitio WPML en producción. Cada paso se corresponde con un fallo descrito arriba.

AspectoEnfoque incorrectoEnfoque correcto
Idioma en AJAXConstante ICL_LANGUAGE_CODEFiltro wpml_current_language o wpml_post_language_details vinculado al ID del post
Almacenamiento del audioUn archivo compartido entre todas las traduccionesUn archivo por ID de post traducido, servido desde CDN
Selección de vozLa misma voz para todos los idiomasUna voz de ElevenLabs asignada a cada idioma de WPML
Selección de modeloModelo fijo para todos los idiomasElección por idioma entre Multilingual v2, Flash v2.5 o Eleven v3
EsquemaAudioObject ausente o solo en inglésAudioObject con inLanguage que coincida con el hreflang de la página

TTSWP sigue la columna de la derecha por defecto. El plugin lee el post traducido directamente, genera un archivo de audio nuevo por ID de post, lo entrega a través de CloudFront y emite el esquema AudioObject por idioma. La documentación de integración con WPML explica el proceso de configuración paso a paso.

Una limitación real

El audio por idioma consume más caracteres que un solo archivo compartido. Si publicas un artículo de 1500 palabras y lo traduces a cinco idiomas, pagas por cinco generaciones, no por una. Ese es el coste de hacerlo bien. Compartir un solo archivo sería más barato, pero el audio no coincidiría con la página. No recomendamos sacrificar la experiencia del lector para ahorrar créditos, y lo decimos en la documentación de créditos.

Si el presupuesto es ajustado, genera audio solo para los idiomas que reciben tráfico real. Las estadísticas de idioma de WPML y tu herramienta de analítica te dirán qué traducciones merecen narración.

Preguntas frecuentes

¿TTSWP es compatible con WPML sin configuración adicional?

Sí. Una vez que ambos plugins están activos, TTSWP detecta WPML, lee el contenido del post traducido para cada idioma y almacena un archivo de audio separado por traducción. Asignas una voz por idioma en los ajustes de TTSWP y publicas las traducciones como siempre. El audio se regenera cuando se actualiza una traducción. Consulta la página de integración con WPML para los pasos de configuración.

¿Por qué mi plugin de texto a voz actual lee todo en inglés en las páginas traducidas?

La causa más probable es la constante obsoleta ICL_LANGUAGE_CODE dentro de una llamada AJAX. Durante AJAX, esa constante suele devolver el idioma predeterminado del sitio en lugar del activo, por lo que el plugin genera o sirve audio en inglés en páginas que no están en inglés. La solución es cambiar al filtro wpml_current_language o leer el idioma directamente desde el ID del post.

¿Puedo usar voces de ElevenLabs diferentes por idioma en WPML?

Sí. TTSWP asigna una voz de ElevenLabs a cada idioma de WPML. Las traducciones al español las lee una voz en español, las traducciones al alemán una voz en alemán, y así sucesivamente. También puedes elegir modelos diferentes por idioma, lo que importa cuando un idioma de destino solo está disponible en Flash v2.5 o Eleven v3 y no en Multilingual v2.

¿Qué idiomas cubre ElevenLabs para sitios WPML?

Multilingual v2 cubre 29 idiomas, Flash v2.5 cubre 32 (añade noruego, húngaro y vietnamita) y Eleven v3 cubre 74 idiomas. Elige el modelo con la mayor cobertura que permita tu margen de latencia. La mayoría de los sitios WPML obtienen buenos resultados con Multilingual v2 o Flash v2.5. Los sitios con idiomas menos comunes mueven esas traducciones a Eleven v3.

¿TTSWP emite esquema por idioma para la búsqueda con IA?

Sí. TTSWP genera un AudioObject por post traducido con un valor inLanguage que coincide con el hreflang de la página. Esto da a los motores de búsqueda y a las herramientas de IA una señal clara sobre qué audio pertenece a qué versión lingüística del artículo, en lugar de etiquetar todas las traducciones de la misma forma.

Siguiente paso

Realiza la comprobación de cinco pasos en el navegador con el plugin de texto a voz que uses ahora. Si algún paso falla, ese es el problema que debes resolver antes de añadir más traducciones. Si quieres una configuración que supere los cinco puntos sin ajustes adicionales, instala Texto a Voz - TTSWP desde WordPress.org, conéctalo al backend de TTSWP y asigna una voz a cada idioma de WPML. El plugin se encarga del resto.