Lector de páginas Snippet HTML WordPress V1.0

<style>
#lectorBtn {
  position: fixed;
  bottom: 10px;
  left: 50%;
  transform: translateX(-50%);
  background-color: #000;
  color: #fff;
  padding: 6px 14px;
  border: none;
  border-radius: 24px;
  cursor: pointer;
  font-size: 14px;
  z-index: 9999;
  display: flex;
  align-items: center;
  gap: 6px;
  box-shadow: 0 3px 6px rgba(0, 0, 0, 0.3);
  transition: background-color 0.3s ease;
  display: none;
}
#lectorBtn:hover {
  background-color: #222;
}
#lectorIcon {
  font-size: 16px;
}
</style>

<button id="lectorBtn" onclick="toggleLectura()" disabled>
  <span id="lectorIcon">🗣️</span>
  <span id="lectorTexto">Cargando...</span>
</button>

<script>
let palabras = [];
let palabraActualGlobal = 0; // Índice global de palabra actual
let leyendo = false;
let procesando = false;
let speech;
const maxPalabrasPorBloque = 20;
let ultimoBloqueLeido = 0; // Guarda el último bloque leído

function dividirTextoEnPalabras(texto) {
  return texto.split(/\s+/).filter(palabra => palabra.length > 0);
}

function iniciarLecturaDesdePosicion() {
  if (palabraActualGlobal >= palabras.length) {
    // Si llegamos al final, reiniciamos
    palabraActualGlobal = 0;
    ultimoBloqueLeido = 0;
    detenerLectura();
    return;
  }

  // Calcula el bloque actual basado en la posición global
  const bloqueActual = Math.floor(palabraActualGlobal / maxPalabrasPorBloque);
  const inicioBloque = bloqueActual * maxPalabrasPorBloque;
  const finBloque = Math.min(inicioBloque + maxPalabrasPorBloque, palabras.length);
  
  const textoBloque = palabras.slice(inicioBloque, finBloque).join(" ");

  speech = new SpeechSynthesisUtterance(textoBloque);
  speech.lang = 'es-CL';

  speech.onstart = () => {
    actualizarBoton("Detener lectura", "🔇");
    leyendo = true;
    ultimoBloqueLeido = bloqueActual; // Guardamos el bloque actual
  };

  speech.onend = () => {
    palabraActualGlobal = finBloque; // Actualizamos la posición global
    if (leyendo) {
      iniciarLecturaDesdePosicion();
    }
  };

  window.speechSynthesis.speak(speech);
}

function detenerLectura() {
  window.speechSynthesis.cancel();
  leyendo = false;
  actualizarBoton("Leer página", "🗣️");
}

function actualizarBoton(texto, icono) {
  document.getElementById("lectorTexto").textContent = texto;
  document.getElementById("lectorIcon").textContent = icono;
}

function toggleLectura() {
  const boton = document.getElementById("lectorBtn");

  if (procesando) return;

  if (!('speechSynthesis' in window)) {
    alert("Tu navegador no soporta lectura en voz.");
    return;
  }

  if (!leyendo) {
    if (palabras.length === 0) {
      const contenedor = document.querySelector('.entry-content') || document.querySelector('article') || document.body;
      const texto = contenedor ? contenedor.innerText.trim() : '';
      if (!texto) {
        alert("No hay texto para leer.");
        return;
      }
      palabras = dividirTextoEnPalabras(texto);
      palabraActualGlobal = 0;
      ultimoBloqueLeido = 0;
    } else {
      // Si ya hay palabras, calculamos la posición inicial del último bloque leído
      palabraActualGlobal = ultimoBloqueLeido * maxPalabrasPorBloque;
    }
    
    procesando = true;
    actualizarBoton("Cargando...", "⏳");
    boton.disabled = true;

    setTimeout(() => {
      procesando = false;
      boton.disabled = false;
      iniciarLecturaDesdePosicion();
    }, 300);
  } else {
    detenerLectura();
  }
}

window.addEventListener('load', function () {
  const boton = document.getElementById("lectorBtn");
  actualizarBoton("Leer página", "🗣️");
  boton.style.display = "flex";
  boton.disabled = false;
});
</script>

🗣️ Lector de Página: Escucha el contenido sin esfuerzo.

Nuestro sitio ahora incluye un lector de pantalla automático, ideal para quienes prefieren escuchar el contenido o tienen dificultades visuales.

🔧 ¿Cómo funciona?.

  • Encontrarás un botón fijo al final de la pantalla que dice:
    “Leer contenido” o “Detener lectura”.
  • Al hacer clic, comenzará la lectura desde el principio del artículo (o desde donde la dejaste si pausaste antes).
  • El sistema lee bloques de texto pequeños (20 palabras), lo que asegura una voz más fluida y natural.
  • Si pausás, el sistema recuerda dónde se detuvo y al reiniciar continuará desde la misma palabra.

🚨 Requisitos

  • Funciona en navegadores modernos como Chrome, Firefox, Edge y Safari.
  • No requiere plugins ni permisos extra.
  • Si tu navegador no soporta esta función, recibirás un mensaje informativo.

Explicación Detallada del Funcionamiento del Lector de Voz Para WordPress.

1. Interfaz del Usuario

  • Botón flotante: Aparece centrado en la parte inferior de la pantalla
  • Diseño responsive: Se adapta a cualquier dispositivo
  • Estados visuales:
    • 🗣️ “Leer página” (inactivo)
    • 🔇 “Detener lectura” (activo)
    • ⏳ “Cargando…” (procesando)

2. Proceso de Lectura

  1. División del texto:
    • Convierte el contenido en un array de palabras
    • Filtra palabras vacías para mayor precisión
    • Divide en bloques de 20 palabras cada uno
  2. Control de flujo:
    • Mantiene un índice global (palabraActualGlobal) para recordar la posición exacta
    • Calcula dinámicamente los bloques basados en esta posición
    • Al reanudar, continúa exactamente donde se quedó
  3. Síntesis de voz:
    • Usa la API Web Speech
    • Configuración para español (es-CL)
    • Procesamiento asíncrono para no bloquear la interfaz

3. Características Clave

  • Persistencia de posición: Recuerda dónde se detuvo incluso después de múltiples pausas
  • Reinicio automático: Al terminar el texto, se prepara para comenzar de nuevo
  • Optimización de rendimiento:
    • No reprocesa el texto completo al reanudar
    • Timeout mínimo (300ms) para evitar bloqueos

4. Compatibilidad

  • Funciona en la mayoría de navegadores modernos (Chrome, Edge, Firefox, Safari)
  • Requiere interacción del usuario para activarse (política de autoplay)
  • Degrada elegantemente en navegadores no compatibles (muestra alerta)

Recomendaciones para Uso en WordPress

  1. Prueba en diferentes temas: Verifica que .entry-content coincida con la clase de tu tema
  2. Considera plugins: Para mayor control, podrías implementarlo como:
    • Shortcode
    • Bloque personalizado
    • Plugin específico
  3. Optimiza el contenido: El lector funciona mejor con texto estructurado (evita muchos elementos interactivos)

✅ ¿Cómo implementarlo correctamente con Code Snippets?

1. 💡 Qué hace este snippet

Este código agrega un botón flotante fijo en la parte inferior de la pantalla, que:

  • Permite leer en voz alta el contenido de la página (sin encabezados, menús ni pies de página).
  • Usa la API SpeechSynthesis del navegador (no requiere servidores externos).
  • Divide el texto en bloques de 20 palabras para lograr una lectura más natural.
  • Retoma la lectura exactamente desde donde fue detenida.
  • Cambia de ícono y texto dinámicamente: 🗣️ “Leer página”, 🔇 “Detener lectura”, ⏳ “Cargando…”.

2. 🧩 Cómo agregarlo con el plugin Code Snippets

✅ Paso a paso:

  1. Ve a tu WordPress > Plugins > Code Snippets (instálalo si no lo tienes).
  2. Crea un nuevo snippet > selecciona tipo HTML (o JavaScript personalizado) si el plugin lo permite. Si no, este código debe insertarse como un snippet de tipo “Site-wide Footer” o “Frontend Only” si tu plugin lo permite.
  3. Pega todo el bloque de código.

3. 📌 Notas importantes

  • Este código no guarda el progreso entre páginas. Si el usuario cambia de URL, la lectura empieza de nuevo.
  • Se puede personalizar el número de palabras por bloque cambiando maxPalabrasPorBloque.
  • Puedes modificar el ícono y colores desde el CSS al gusto.

4. ✅ Recomendación final

Agrega una pequeña nota en tu pie de página o en el menú de accesibilidad que diga algo como:

🎧 ¿Quieres escuchar el contenido? Pulsa el botón 🗣️ “Leer página” que aparece al final de la página.

Deja un comentario

diecisiete + 6 =

    0
    Tu carrito
    Tu carrito está vacíoIr a la tienda