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: Compatibility
Este tema contiene 15 respuestas, tiene 0 voces.
Última actualización por Otto hace 1 día, 9 horas.
Asistido por: Otto.
Autor | Publicaciones |
---|---|
agosto 12, 2025 a las 9:41 am #17312653 | |
OscarO-3 |
Antecedentes del problema: Síntomas: Preguntas: |
agosto 12, 2025 a las 4:57 pm #17314328 | |
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 estás actualizando WPML y WCML o también Flexible Checkout Fields PRO? ¿Desde qué versiones? ¿La página de checkout usa bloques o el shortcode clásico [woocommerce_checkout]?¿Has creado un único grupo de campos en el idioma principal y traducido las cadenas con WPML, o hay grupos duplicados por idioma? ¿Los campos problemáticos están marcados como “required” en FCF? Prueba volviendo a salvar la configuración de FCF y, si fuera necesario, actualizar sus traducciones. En tu sitio de pruebas haz el siguiente test por favor: Saludos cordiales, |
agosto 13, 2025 a las 6:39 am #17315567 | |
OscarO-3 |
Hola Otto, Respondo a tus preguntas: - Estoy actualizando todo (plugins, plantilla y versión de WordPress). El sistema está funcionando perfectamente en producción con esta configuración: FCF (versión 4.1.19), FCF PRO (versión 4.0.14), WCML (versión 5.4.3), WPML Multilingual CMS (versión 4.7.3), WPML String Translation (versión 3.3.2) - La página de checkout utiliza bloques. He creado un único grupo de campos en el idioma principal y traducido las cadenas con WPML. Los campos conflictivos son required (pero también he intentado, a través de FCF, quitar el required y ponerlo con conditional logic. Lo que ocurre entonces es que el campo deja de ser obligatorio y puedo enviar el pedido sin rellenar estos campos) - He hecho cambios en la configuración de FCF y diversas pruebas como te he comentado en el punto anterior, pero el problema permanece. - El problema sólo aparece cuando WCML está activado, si lo desactivo, todo funciona correctamente. He realizado estas pruebas que me comentas para poder detectar dónde estaba el problema o incompatibilidad. Puedo proporcionarte una copia hecha con Duplicator PRO si necesitáis generar un entorno donde hacer las pruebas o, en su defecto, daros acceso al servidor de pruebas. Saludos y gracias por adelantado, |
agosto 13, 2025 a las 12:53 pm #17317566 | |
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. Una copia del sitio sería genial. Habilito una respuesta privada para que puedas compartir un link de descarga. Saludos cordiales, |
agosto 13, 2025 a las 4:44 pm #17318615 | |
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 instalado el sitio localmente, he podido reproducir el problema, pero no doy con la solución 🙁 Sería bueno saber si han sido los cambios en WCML o en FCF los que han generado la incompatibilidad. Para ello, si es posible para ti, podrías mantener las versiones que funcionan: Por otro lado, he notado en el changelg de FCF que ellos mantienen la compatibilidad por lo que te sugiero que consultes con ellos también, si es que aún no lo has hecho. Saludos cordiales, |
agosto 14, 2025 a las 5:03 pm #17321784 | |
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. He creado un pequeño plugin que soluciona el problema de compatibilidad. Al final de la respuesta copio el código para lo pruebes cuidadosamente en un entorno de desarrollo antes de aplicarlo en producción. Puedes instalarlo como un mu-plugin simplemente copiando el archivo a la carpeta wp-content/mu-plugins. O instalarlo como cualquier otro plugin, para ello crea la carpeta fcf-wcml-compat y pon dentro fcf-wcml-compat.php (con el código que te paso al final). Comprime la carpeta en fcf-wcml-compat.zip. Instálalo desde Plugins → Añadir nuevo → Subir plugin. El problema es el siguiente: El plugin que te he compartido “Limpia” esa información oculta antes de que FCF la lea, para que FCF entienda correctamente qué campos se mostraron/ocultaron. Además, como red de seguridad, si un campo no llegó en el envío del formulario (porque estaba oculto), se evita que WooCommerce lo exija como obligatorio. Si bien la "culpa" (en compatibilidad no hay culpas 😉 ) pareciera ser de WCML, yo creo que la solución final tendría que implementarla FCF. Esa información oculta la crea y la usa FCF. Lo ideal es que FCF sea resistente a diferencias de formato para que el checkout nunca se bloquee aunque otro plugin (como WCML) cambie algo en el camino. Arreglarlo en FCF hace que el sistema sea más sólido sin depender de parches externos y reduce el riesgo de que el problema reaparezca con futuras actualizaciones. Quedo atento a tus comentarios. Saludos cordiales, <?php /* Plugin Name: FCF ⇄ WCML Compat (logic_results_storage normalizer) Description: Normaliza el payload de lógica condicional de Flexible Checkout Fields PRO cuando WCML está activo para evitar fallos de validación por JSON mal decodificado. Author: DevOps Version: 0.1 */ if ( ! defined( 'ABSPATH' ) ) { exit; } /** * Intenta decodificar en distintos escenarios de codificación. * Devuelve array si tiene éxito o null si falla. */ function fcf_wcml_try_decode_results( $raw ) { // Sin tocar $arr = json_decode( $raw, true ); if ( is_array( $arr ) ) { return $arr; } // urldecode (una vez) $arr = json_decode( urldecode( $raw ), true ); if ( is_array( $arr ) ) { return $arr; } // rawurldecode $arr = json_decode( rawurldecode( $raw ), true ); if ( is_array( $arr ) ) { return $arr; } // Doble urldecode $arr = json_decode( urldecode( urldecode( $raw ) ), true ); if ( is_array( $arr ) ) { return $arr; } // Quitar slashes extra $arr = json_decode( wp_unslash( $raw ), true ); if ( is_array( $arr ) ) { return $arr; } return null; } /** * Normaliza $_POST['logic_results_storage'] lo antes posible en el proceso de checkout * para que FCF PRO pueda decodificarlo correctamente con su urldecode() interno. */ add_action( 'woocommerce_checkout_process', function () { $key = 'logic_results_storage'; if ( empty( $_POST[ $key ] ) ) { // phpcs:ignore WordPress.Security.NonceVerification.Missing return; } $raw = $_POST[ $key ]; // phpcs:ignore WordPress.Security.NonceVerification.Missing // No usar wp_unslash aquí: queremos probar varias ramas nosotros mismos. $decoded = fcf_wcml_try_decode_results( $raw ); if ( is_array( $decoded ) ) { // Re-serializamos en el formato que espera FCF: urlencode(JSON) $normalized = urlencode( wp_json_encode( $decoded ) ); $_POST[ $key ] = $normalized; // phpcs:ignore WordPress.Security.NonceVerification.Missing // Opcional: logging de diagnóstico (comentado por defecto). // error_log( '[FCF-WCML-Compat] logic_results_storage normalizado correctamente.' ); } else { // error_log( '[FCF-WCML-Compat] No se pudo normalizar logic_results_storage.' ); } }, 1 ); /** * Durante el procesamiento del checkout (solamente en POST), desactiva "required" * para aquellos campos que no vienen en $_POST. Esto evita que WooCommerce valide * campos que no se mostraron por lógica condicional. */ add_filter( 'woocommerce_checkout_fields', function ( $fields ) { if ( empty( $_POST ) ) { // Solo actuar en envío del checkout. return $fields; } foreach ( $fields as $section => $section_fields ) { if ( ! is_array( $section_fields ) ) { continue; } foreach ( $section_fields as $key => $field ) { if ( ! array_key_exists( $key, $_POST ) ) { // phpcs:ignore WordPress.Security.NonceVerification.Missing // No venía en el POST → probablemente oculto. Evita que falle la validación. $fields[ $section ][ $key ]['required'] = false; } } } return $fields; }, 1000001 ); |
agosto 18, 2025 a las 11:06 am #17327418 | |
OscarO-3 |
Hola Otto, buenos días, Muchas gracias por tu ayuda y disculpa por el retraso en contestar, el viernes fue festivo aquí en España. He descargado el código que me has facilitado y lo he añadido como plugin y, salvo que haya hecho algo incorrectamente, no está funcionando como debiera. Es cierto que ya no se solicitan los campos obligatorios del método de envío no seleccionado pero, ahora, sin embargo, en cualquiera de los métodos de envío, los campos creados con FCF dejan de ser obligatorios y puedo enviar el pedido sin rellenarlos y el pedido se tramita igualmente, sin generarme el mensaje de error de campo obligatorio no rellenado (es decir, puedo dejar el campo Seleccione la tienda vacío cuando selecciono recogida en tienda y los campos de dirección cuando es entrega a domicilio). Si estoy en lo cierto, creo que el plugin que me has facilitado deshabilita la validación de los campos FCF pero no resuelve el problema, ¿me explico? Muchas gracias de nuevo y saludos, |
agosto 18, 2025 a las 1:24 pm #17328051 | |
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, Es extraño... 🤔 Yo he chequeado el escenario que describes y en mi caso funcionaba correctamente. Si algún campo visible de FCF no estaba completo aparecía la advertencia de campo requerido. ¿Podrías probarlo como mu-plugin? En mi caso, yo lo he testeado con el setup mínimo. Es decir, habilitando solo los plugins necesarios para reproducir el problema y con un tema por defecto. ¿Podrías chequearlo desactivando todos los plugins salvo WooCommerce, WCML, FCF, FCF PRO, WPML y sus add-ons y con el tema Twenty Twenty Five? Si el problema desaparece, reactiva los plugins uno por uno hasta identificar cuál causa el conflicto. Saludos cordiales, |
agosto 19, 2025 a las 2:17 pm #17331772 | |
OscarO-3 |
Hola Otto, He probado a añadir el fichero como mu-plugin y tampoco funciona correctamente, hace exactamente lo mismo que como plugin. Los siguientes comentarios los realizo en tono constructivo, por aquí no se puede interpretar el tono y no me gustaría que hubiera malentendidos, agradezco tu ayuda 🙂 1) Llevo con esta incidencia abierta más de 1 mes entre los foros de soporte de FCF y WPML 2) Como te comenté en post anteriores, la prueba de deshabilitar todo e ir activando ya la he realizado varias veces para detectar dónde estaba el problema. El error sólo aparece con WCML activado. Con todo el resto de software activado el error no se presenta y en cuanto se activa WCML, el error aparece 3) Os facilité una copia del site para que pudierais hacer pruebas, ver el error que se estaba produciendo y, si era pertinente, desarrollar una solución. Veo por lo que me comentas que la hipotética solución que habéis desarrollado está funcionando con más de la mitad del software que la tienda utiliza desactivado y con otra plantilla diferente, es decir, es una solución que no me sirve, no puedo utilizar. ¿Qué sentido tiene entonces que os facilite una copia exacta del site? Como te digo, no sé si estaré haciendo algo incorrectamente así que, si te parece, ¿podrías por favor facilitarme la copia en la que la solución que me habéis facilitado funciona? Saludos, |
agosto 19, 2025 a las 3:42 pm #17332125 | |
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 por tus comentarios. He creado una nueva versión del plugin y la he probado exhaustivamente en la copia exacta de tu sitio. Dime si he omitido algún escenario, por favor. Saludos cordiales, <?php /* Plugin Name: FCF ⇄ WCML Compat (logic_results_storage normalizer) Description: Normaliza el payload de lógica condicional de Flexible Checkout Fields PRO cuando WCML está activo para evitar fallos de validación por JSON mal decodificado. Author: DevOps Version: 0.1 */ if ( ! defined( 'ABSPATH' ) ) { exit; } /** * Intenta decodificar en distintos escenarios de codificación. * Devuelve array si tiene éxito o null si falla. */ function fcf_wcml_try_decode_results( $raw ) { // Sin tocar $arr = json_decode( $raw, true ); if ( is_array( $arr ) ) { return $arr; } // urldecode (una vez) $arr = json_decode( urldecode( $raw ), true ); if ( is_array( $arr ) ) { return $arr; } // rawurldecode $arr = json_decode( rawurldecode( $raw ), true ); if ( is_array( $arr ) ) { return $arr; } // Doble urldecode $arr = json_decode( urldecode( urldecode( $raw ) ), true ); if ( is_array( $arr ) ) { return $arr; } // Quitar slashes extra $arr = json_decode( wp_unslash( $raw ), true ); if ( is_array( $arr ) ) { return $arr; } return null; } /** * Obtiene resultados de lógica condicional desde $_POST si están presentes. * * @return array|null */ function fcf_wcml_get_results_from_post() { $key = 'logic_results_storage'; if ( empty( $_POST[ $key ] ) ) { // phpcs:ignore WordPress.Security.NonceVerification.Missing return null; } $raw = $_POST[ $key ]; // phpcs:ignore WordPress.Security.NonceVerification.Missing $candidates = [ $raw, urldecode( $raw ), rawurldecode( $raw ), wp_unslash( $raw ), urldecode( wp_unslash( $raw ) ), ]; foreach ( $candidates as $candidate ) { $arr = json_decode( $candidate, true ); if ( is_array( $arr ) ) { return $arr; } } return null; } /** * Normaliza $_POST['logic_results_storage'] lo antes posible en el proceso de checkout * para que FCF PRO pueda decodificarlo correctamente con su urldecode() interno. */ add_action( 'woocommerce_checkout_process', function () { $key = 'logic_results_storage'; if ( empty( $_POST[ $key ] ) ) { // phpcs:ignore WordPress.Security.NonceVerification.Missing return; } $raw = $_POST[ $key ]; // phpcs:ignore WordPress.Security.NonceVerification.Missing // No usar wp_unslash aquí: queremos probar varias ramas nosotros mismos. $decoded = fcf_wcml_try_decode_results( $raw ); if ( is_array( $decoded ) ) { // Re-serializamos en el formato que espera FCF: urlencode(JSON) $normalized = urlencode( wp_json_encode( $decoded ) ); $_POST[ $key ] = $normalized; // phpcs:ignore WordPress.Security.NonceVerification.Missing // Opcional: logging de diagnóstico (comentado por defecto). // error_log( '[FCF-WCML-Compat] logic_results_storage normalizado correctamente.' ); } else { // error_log( '[FCF-WCML-Compat] No se pudo normalizar logic_results_storage.' ); } }, 1 ); /** * Durante el procesamiento del checkout (solamente en POST), desactiva "required" * para aquellos campos que no vienen en $_POST. Esto evita que WooCommerce valide * campos que no se mostraron por lógica condicional. */ add_filter( 'woocommerce_checkout_fields', function ( $fields ) { if ( empty( $_POST ) ) { // Solo actuar en envío del checkout. return $fields; } $results = fcf_wcml_get_results_from_post(); if ( ! is_array( $results ) ) { // Si no tenemos resultados válidos, no tocar los requeridos para evitar falsos positivos/negativos. return $fields; } foreach ( $fields as $section_name => $section_fields ) { if ( ! is_array( $section_fields ) ) { continue; } foreach ( $section_fields as $field_name => $field_def ) { if ( ! isset( $results[ $field_name ] ) || ! is_array( $results[ $field_name ] ) ) { continue; } foreach ( $results[ $field_name ] as $action => $value ) { switch ( $action ) { case 'required': $fields[ $section_name ][ $field_name ]['required'] = (bool) $value; break; case 'hide': if ( true === (bool) $value ) { unset( $fields[ $section_name ][ $field_name ] ); } break; case 'show': if ( false === (bool) $value ) { unset( $fields[ $section_name ][ $field_name ] ); } break; } } } } return $fields; }, 1000001 ); |
agosto 20, 2025 a las 12:16 pm #17334181 | |
OscarO-3 |
Hola Otto, Muchas gracias por tu ayuda (y tu paciencia). He hecho un par de pruebas preliminares rápidas (como mu-plugin) y, ahora sí, parece que está funcionando correctamente. Voy a hacer un set de pruebas más extenso durante la tarde y te confirmo si el problema está solucionado. Muchas gracias y saludos, |
agosto 20, 2025 a las 1:09 pm #17334360 | |
Otto Partidario de WPML desde 09/2015
Idiomas: Inglés (English ) Español (Español ) Zona horaria: America/Argentina/Buenos_Aires (GMT-03:00) |
Excelente, gracias. Quedo atento a tus comentarios. Saludos cordiales, |
agosto 20, 2025 a las 3:16 pm #17334802 | |
OscarO-3 |
Hola de nuevo, Otto, Acabo de finalizar la revisión, he podido hacer compras en ambos idiomas y el sistema funciona correctamente y muestra los mensajes correctos cuando los campos no se completan (no permite acabar el pedido si están en blanco). He revisado también la parte de backend, para ver si el proceso de traducción y demás funcionaba correctamente, no he detectado nada raro. Sin embargo, veo que precisamente hoy ¬¬, WPDesk ha sacado una nueva actualización de FCF (la versión gratuita) y también hay nueva versión de Avada, así que, si no es mucho pedir, déjame por favor un poco de tiempo para hacer pruebas con las nuevas actualizaciones y ver si todo sigue funcionando antes de cerrar el ticket, ¿de acuerdo? Muchas gracias y saludos, |
agosto 20, 2025 a las 4:14 pm #17335122 | |
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, Desde luego, tómate el tiempo necesario. El ticket solo se cierra automáticamente luego de dos semanas sin interacciones. Saludos cordiales, |
agosto 21, 2025 a las 8:04 am #17336286 | |
OscarO-3 |
Hola Otto, buenos días, Acabo de actualizar todo de nuevo (Wocommerce, plantilla y un par de plugins que también habían lanzado actualizaciones) y he hecho un repaso exhaustivo de todo el site tanto en la part front como backend. Todo parece funcionar correctamente :), así que voy a proceder a avisar al cliente y a hacer la actualización en producción, si todo va bien, podremos cerrar el ticket, te mantengo informado. Muchas gracias por tu ayuda y saludos, |