Este es el foro de soporte técnico de WPML, el plugin multilingüe de WordPress.
Todas las personas pueden leerlo pero solo los clientes de WPML pueden ingresar comentarios. El equipo de WPML responde en los foros 6 días a la semana, 22 horas por día.
Sun | Mon | Tue | Wed | Thu | Fri | Sat |
---|---|---|---|---|---|---|
- | 9:00 – 13:00 | 5:00 – 13:00 | 5:00 – 13:00 | 5:00 – 13:00 | 5:00 – 13:00 | - |
- | 14:00 – 18:00 | 14:00 – 18:00 | 14:00 – 18:00 | 14:00 – 18:00 | 14:00 – 18:00 | - |
Zona horaria del soporte: America/Argentina/Buenos_Aires (GMT-03:00)
Etiquetado: Exception
Este tema contiene 11 respuestas, tiene 0 voices.
Última actualización por Otto hace 1 mes, 2 semanas.
Asistido por: Otto.
Autor | Publicaciones |
---|---|
agosto 8, 2025 a las 11:52 am #17305268 | |
antonK-14 |
Antecedentes del problema: El error consiste en que, tras reservar una franja horaria en un idioma determinado (Inglés o Francés), esa misma franja aparece bloqueada al elegirla como hora de inicio, pero se vuelve a mostrar disponible al desplegar el selector de hora de fin si primero se escoge un inicio anterior al bloque reservado. En otras palabras: Descripción del entorno: * WordPress (instalación limpia) * WooCommerce Idiomas configurados * Español (idioma principal) Pasos para reproducir el fallo: En el calendario se puede hacer la prueba seleccionando el día 20 de Agosto. Ese día existe una reserva de prueba de 12:00 a 14:00 realizada en Ingles. 1. En el frontend, con el idioma configurado en Español, realiza una reserva de la franja 12:00–14:00. Importante: Esto sucede con cualquier franja horaria. de 12 a 14 es solo un ejemplo. > Nota: Este comportamiento incorrecto sólo se da cuando la reserva previa y la nueva se hacen en el mismo idioma. En el resto de idiomas funciona correctamente. > El selector de idioma esta en el footer En pocas palabras, las franjas horarias ya reservadas en un idioma vuelven a estar disponibles si se repite la operación en ese mismo idioma. (Excluyendo el idioma principal del sitio) No uso ningún plugin de caché ni de optimización. Es una instalación limpia. Síntomas: Preguntas: |
agosto 8, 2025 a las 1:53 pm #17305604 | |
Otto Partidario de WPML desde 09/2015
Idiomas: Inglés (English ) Español (Español ) Zona horaria: America/Argentina/Buenos_Aires (GMT-03:00) |
Hola, ¿Podrías por favor probar si el problema persiste en la versión beta de WCML? Puedes descargarla aquí: Hazlo en un sitio de pruebas si es posible o con un backup confiable y que puedas restaurar disponible. Saludos cordiales, |
agosto 8, 2025 a las 4:29 pm #17306032 | |
antonK-14 |
Hola Otto, Gracias por la indicación. Ya he instalado la versión beta 5.5.2-b.1 en un entorno de pruebas y esto es lo que he comprobado: Comprobación - Reserva existente (20 de agosto): Tras actualizar a la beta, las franjas bloqueadas del día 20 (12:00–14:00) ya aparecen correctamente deshabilitadas en todos los idiomas (incluido el Inglés). Comprobación - Nuevas reservas de prueba en Inglés (21 y 22 de agosto): Resultado: Sin embargo, en el resto de idiomas (Español y Francés), esas mismas franjas no aparecen bloqueadas: se comportan como si estuvieran libres. En resumen: la beta parece corregir el bloqueo en el idioma desde el que se realiza la reserva, pero ahora las franjas ya reservadas no se comparten entre idiomas como ocurría antes (el problema se invierte por). Observaciones: Espero haberme explicado. Saludos. |
agosto 8, 2025 a las 8:51 pm #17306315 | |
Otto Partidario de WPML desde 09/2015
Idiomas: Inglés (English ) Español (Español ) Zona horaria: America/Argentina/Buenos_Aires (GMT-03:00) |
Hola, Disculpas por el olvido, podrías usar las betas de WPML Core y String Translation, puedes descargarlas de estos enlaces: Saludos cordiales, |
agosto 9, 2025 a las 9:37 am #17306696 | |
antonK-14 |
Hola Otto, He descargado e instalado las versiones beta de los tres plugins que indicaste. Avisos en el panel: Se han resuelto todos, excepto: Prueba tras instalar las betas: Realicé una reserva en inglés para el 20 de agosto, de 11:00 a 16:00. En el mismo idioma de la reserva (inglés), las franjas ya reservadas vuelven a mostrarse disponibles si se intenta reservar de nuevo al seleccionar un inicio anterior (el bloqueo del selector de fin no se respeta). En el resto de idiomas (español y francés), esas franjas sí aparecen correctamente bloqueadas. Resumen: el error original persiste en el idioma en el que se crea la reserva; en los demás idiomas el bloqueo funciona correctamente. ¿Podríais confirmarme si ya estabais al tanto de este problema o si es la primera vez que se reporta? Quedo a la espera de otra solución o una nueva build, ya que la beta actual no parece parchear este problema. Muchas gracias y saludos, |
agosto 11, 2025 a las 1:28 pm #17310098 | |
Otto Partidario de WPML desde 09/2015
Idiomas: Inglés (English ) Español (Español ) Zona horaria: America/Argentina/Buenos_Aires (GMT-03:00) |
Hola, Gracias. ¿El problema ocurre solo en el idioma por defecto del sitio? ¿Si desactivas WPML funciona correctamente? Para investigar mejor el problema, ¿puedes proporcionarme acceso temporal a tu sitio (wp-admin y FTP)? Si es necesario, podría replicar tu sitio localmente instalando un plugin (Duplicator, WP All in One Migration o Updraft Plus)? Una vez resuelto el problema, borraré la copia. Saludos cordiales, |
agosto 11, 2025 a las 8:47 pm #17311463 | |
antonK-14 |
Hola Otto, Te comento con todo el respeto y ánimo constructivo del mundo: desde el inicio de este hilo he respondido ya varias veces a las mismas preguntas, que vuelven a salir como si fueran nuevas. No pasa nada grave, pero hace que avancemos más despacio… un poco como cuando intentas caminar con una chancla rota: se puede, pero cuesta más. He notado que esto no es algo exclusivo de este caso, sino que en otros hilos del soporte de WPML también ocurre: las dudas se repiten, los usuarios se van cansando y, al final, dejan de responder. Y ahí es cuando el tema aparece como “solucionado”, aunque en realidad todavía no lo esté. Al final, todos perdemos: el usuario porque no recibe una solución completa, y WPML porque se queda con la sensación (y la imagen) de que la historia terminó con final feliz… cuando en realidad se quedó a medias, como una serie que cancelan en la segunda temporada. En este caso concreto, desde el primer mensaje quedó claro que: El problema no está limitado al idioma por defecto. Al desactivar WPML, el fallo desaparece. Esto ya nos indicaba que el origen no era WooCommerce Bookings sino WPML o alguno de sus módulos asociados. Aun así, hemos estado dando vueltas y ahora, tras una investigación exhaustiva, tenemos claro dónde se produce el error y cómo replicarlo. A continuación te detallo el análisis y la prueba de concepto que he preparado para demostrar el origen del bug y proponer una solución temporal mientras WPML publica un parche oficial. Si alguien se topa con este mismo problema y quiere una solución rápida y segura hasta que WPML lo corrija oficialmente, he publicado el plugin WooCommerce Bookings – WPML End Time Fix para descarga gratuita en mi web. No toca el núcleo de otros plugins, actúa en el navegador y es la solución recomendada hasta que llegue el parche oficial. 👉 Descargar plugin aquí: enlace oculto (Publicaré el plugin el 12 de agosto a las 18:00 H/ESP.) Documentación Técnica: Análisis del Bug de Disponibilidad en WooCommerce Bookings y WPML Fecha: 11 de agosto de 2025 1. Resumen del Problema Se ha identificado un bug recurrente al utilizar WooCommerce Bookings con WPML que puede llevar a dobles reservas. El problema se manifiesta cuando se intenta realizar una reserva en un idioma secundario donde ya existe una reserva previa en ese mismo idioma. El selector de hora de fin no respeta los bloqueos de tiempo existentes, mostrándolos incorrectamente como disponibles. El análisis sugiere que la causa probable es un filtro de datos defectuoso en el plugin woocommerce-multilingual. Como prueba de concepto, se ha desarrollado un parche que parece solucionar el problema en su origen. Sin embargo, dado que modificar archivos del núcleo de un plugin de terceros puede tener consecuencias imprevistas, este informe detalla el hallazgo y propone el uso de un plugin externo como solución temporal segura. La responsabilidad de una solución definitiva recae en OnTheGoSystems, los desarrolladores de WPML. 2. Análisis de Síntomas El comportamiento del bug es muy específico y consistente: Condición de Activación: El fallo solo ocurre cuando una reserva existente y una nueva reserva se realizan en el mismo idioma secundario. Selector de Inicio (Correcto): El desplegable de "hora de inicio" sí respeta los bloqueos. Selector de Fin (Incorrecto): Tras seleccionar una hora de inicio válida, el desplegable de "hora de fin" se rellena incorrectamente, ignorando los bloqueos existentes. Este comportamiento indica que la consulta de disponibilidad inicial funciona, pero una segunda consulta, específica para las horas de fin, está fallando. 3. Proceso de Diagnóstico: La Investigación El proceso para identificar la causa del error fue el siguiente: Desarrollo de un Plugin "Fix": Se creó un plugin externo (wcb-wpml-fix) con un sistema de logging avanzado. Este plugin fue crucial para confirmar que la disponibilidad inicial que recibía el navegador era correcta, pero la que se cargaba para el selector de hora de fin era incorrecta. Identificación del Disparador: Se confirmó que el problema se desencadena por la llamada AJAX wc_bookings_get_end_time_html, que se ejecuta cada vez que se selecciona una hora de inicio. Localización del Handler y Lógica de Bookings: Se rastreó la acción AJAX hasta la función get_end_times() en el archivo class-wc-booking-form.php. Se determinó que el punto crítico era la consulta que esta función realiza para obtener las reservas existentes. Búsqueda Forense y Hallazgo: Tras una investigación exhaustiva, se identificó la función bookings_in_date_range_query en el archivo woocommerce-multilingual/compatibility/WcBookings/class-wcml-bookings.php como el punto donde se aplica el filtrado de disponibilidad multilingüe. 4. Hipótesis sobre la Causa Raíz Nuestra hipótesis, basada en las pruebas, es que la causa del bug reside en la función bookings_in_date_range_query del archivo class-wcml-bookings.php. Creemos que esta función, diseñada para filtrar reservas por idioma, tiene una lógica defectuosa cuando se ejecuta en el contexto de la llamada AJAX wc_bookings_get_end_time_html. En este escenario, parece eliminar incorrectamente de los resultados las reservas que se hicieron en ese mismo idioma, devolviendo una lista vacía a WooCommerce Bookings y provocando que el selector de hora de fin se genere sin la información de los bloqueos. 5. La Solución (Prueba de Concepto) Para verificar nuestra hipótesis, se desarrolló un parche experimental. Es importante subrayar que este parche se creó únicamente con fines de diagnóstico y como prueba de concepto para vuestro equipo. A continuación, se detalla el código exacto de esta prueba de concepto. Esta modificación se aplicó directamente sobre el plugin woocommerce-multilingual para validar la hipótesis del error. Archivo a modificar: Procedimiento: Código de la función parcheada: public function bookings_in_date_range_query( $booking_ids ) { // --- PARCHE WCB FIX --- $current_language = $this->sitepress->get_current_language(); foreach ( $booking_ids as $key => $booking_id ) { if ( $wc_booking_lang != $current_language ) { if ( $language_code != $current_language ) { return $booking_ids; Resultado: Las pruebas realizadas con este parche fueron exitosas. Sin embargo, no se ha realizado un análisis de regresión completo para determinar si esta modificación podría afectar negativamente a otras funcionalidades del plugin woocommerce-multilingual. 6. Conclusión y Recomendaciones El análisis indica con un alto grado de certeza que el problema se origina en el plugin woocommerce-multilingual. El parche desarrollado valida esta hipótesis y ofrece una posible vía de solución para los desarrolladores de WPML. No obstante, no se recomienda aplicar este parche en un entorno de producción debido a los riesgos inherentes de modificar el código de un plugin de terceros. Recomendación a Corto Plazo: Se recomienda encarecidamente utilizar el plugin externo wcb-wpml-fix que hemos desarrollado. Esta es la solución más segura y estable hasta que OnTheGoSystems Limited publique una corrección oficial. Ventajas del Plugin "Fix": No Invasivo: No modifica ningún archivo del núcleo de otros plugins. Seguro: Su lógica se ejecuta en el navegador del cliente, corrigiendo el resultado final sin alterar los procesos del servidor. Efectivo: Soluciona el problema de cara al usuario, previniendo eficazmente las dobles reservas. Pasos a Seguir para usuarios que sufren de este mismo problema. Utilizar el Plugin "Fix": Mantener el plugin wcb-wpml-fix activo para garantizar el correcto funcionamiento de las reservas. Analiza este Informe: Presenta esta documentación detallada al equipo de desarrollo de WPML para que puedan analizarla y desarrollar una solución oficial. Desactivar el Plugin "Fix" en el Futuro: Una vez que woocommerce-multilingual sea actualizado con una corrección oficial para este bug, el plugin wcb-wpml-fix deberá ser desactivado para evitar conflictos. Perdona que te responda con IA, pero si lo hiciera todo a mano sentiría que estoy perdiendo el tiempo… y el tiempo es oro, o en mi caso, cerveza 0.0 y tapas. |
agosto 12, 2025 a las 12:41 pm #17313445 | |
Otto Partidario de WPML desde 09/2015
Idiomas: Inglés (English ) Español (Español ) Zona horaria: America/Argentina/Buenos_Aires (GMT-03:00) |
Hola, En primer lugar, te pido disculpas. Lamento haber omitido datos relevantes que ya estaban en el ticket. Agradezco tu crítica constructiva y tomaré muy en cuenta tus comentarios. También agradezco tu detallada explicación del problema y que hayas compartido una solución con todos los usuarios. Por mi parte, voy a reproducir el problema en un sitio de pruebas para poder escalarlo a nuestro equipo de desarrollo y tener una solución definitiva. Muchas gracias por tu cooperación y paciencia. Saludos cordiales, |
agosto 13, 2025 a las 9:40 am #17316300 | |
antonK-14 |
Hola Otto, Gracias por tu respuesta. Quería informar de que ya he publicado el artículo y el plugin de solución temporal en mi sitio web. Pido disculpas por la pequeña demora desde mi último mensaje; tuvimos que realizar algunos ajustes de última hora en la lógica del script para asegurar que funcionara correctamente con productos que utilizan intervalos entre reservas (buffer periods), un caso de uso que resultó ser más complejo de lo previsto. El enlace de descarga ya está disponible en el artículo: enlace oculto Si lo consideráis apropiado y útil para otros usuarios que puedan estar enfrentando el mismo problema, sentíos libres de compartir el enlace. Muchas gracias de nuevo por vuestra atención y cooperación. Estaré atento a tus pruebas para ver si se finalmente es un problema real o puntual. Saludos cordiales. |
agosto 13, 2025 a las 2:36 pm #17318078 | |
Otto Partidario de WPML desde 09/2015
Idiomas: Inglés (English ) Español (Español ) Zona horaria: America/Argentina/Buenos_Aires (GMT-03:00) |
Hola, Muchas gracias. He podido reproducir el problema desde cero y lo he escalado a nuestro soporte de segundo nivel. En mi sitio de pruebas el plugin que has creado no soluciona el problema. Hay que configurar algo? Si te interesa, puedes chequearlo ingresando al admin siguiendo este enlace: De todos modos, el problema ya fue escalado. Saludos cordiales, |
agosto 13, 2025 a las 5:41 pm #17318807 | |
antonK-14 |
Hola Otto, Muchas gracias por tu respuesta y, sobre todo, por haber reproducido y escalado el problema. Respecto al plugin: tras revisar el sandbox, he comprobado que el problema era el tema. En tu instalación tenías activo Twenty Twenty-One, que probablemente impide la ejecución del JavaScript o altera la estructura de WooCommerce Bookings, haciendo que el plugin no reconozca el producto como reservable (una de sus condiciones para activarse). He cambiado el tema a Twenty Twenty-Five y el plugin ya funciona correctamente. Aunque no puedo asegurar el motivo técnico exacto sin un acceso más profundo, eso ya no es lo importante. Una vez que saquen una corrección oficial para el bug de WCML, este asunto quedará en el olvido, ya que como vimos, es un error muy sutil. Doy por solucionado este hilo. Muchas gracias por tu ayuda. Saludos. |
agosto 13, 2025 a las 5:47 pm #17318809 | |
Otto Partidario de WPML desde 09/2015
Idiomas: Inglés (English ) Español (Español ) Zona horaria: America/Argentina/Buenos_Aires (GMT-03:00) |
Hola, Muchas gracias a ti por tu cooperación y tus comentarios constructivos. He re-abierto el hilo solo para ponerlo en el estado correcto (escalado al equipo de compatibilidad). De este modo, podré avisarte si hay novedades en la evolución de nuestro ticket interno. Saludos cordiales, |
agosto 21, 2025 a las 1:13 pm #17337618 | |
Otto Partidario de WPML desde 09/2015
Idiomas: Inglés (English ) Español (Español ) Zona horaria: America/Argentina/Buenos_Aires (GMT-03:00) |
Hola, Solo para comentarte que hay un fix preparado e incluido en WCML 5.5.2. Saludos cordiales, |