Problemas de visualización con WordPress localizado (checo, eslovaco, alemán, francés)
Problema
WOOT (WooCommerce Products Tables) no muestra los productos correctamente en sitios con ciertas localizaciones de idioma. La tabla aparece vacía o la consola del navegador muestra errores de análisis de JSON.
Idiomas afectados:
- Checo (cs_CZ)
- Eslovaco (sk_SK)
- Alemán (de_DE)
- Francés (fr_FR)
- Otros idiomas que usan comillas tipográficas
Causa raíz
WordPress convierte automáticamente las comillas ASCII estándar (") en comillas tipográficas localizadas (por ejemplo, las comillas checas „así" o las alemanas „Anführungszeichen") mediante la función wptexturize(). Esto rompe el análisis de JSON, porque JSON exige comillas dobles ASCII estándar.
Ejemplo del problema:
// Valid JSON (works):
{"name": "Product"}
// Broken JSON (Czech localization):
{„name": „Product"}Cuando WOOT devuelve los datos de los productos como JSON, WordPress convierte las comillas, el JSON deja de ser válido y el analizador de JavaScript falla.
Solución
Añada este código al archivo functions.php de su tema para desactivar la conversión de comillas en las localizaciones problemáticas:
/**
* Fix: Disable typographic quote conversion for AJAX requests
* Resolves WOOT JSON parsing issues in Czech, Slovak, German, French locales
*/
add_action('init', function () {
$locale = get_locale();
$problematic_locales = ['cs_CZ', 'sk_SK', 'de_DE', 'fr_FR'];
if (in_array($locale, $problematic_locales)) {
add_filter('run_wptexturize', '__return_false');
}
});
Cómo funciona
- Detecta la localización actual de WordPress con
get_locale() - Comprueba si la localización figura en la lista de idiomas problemáticos
- Desactiva la función
wptexturize(), que convierte las comillas - El JSON sigue siendo válido con comillas ASCII estándar
- WOOT puede analizar correctamente los datos de los productos
Solución alternativa (solo AJAX)
Si quiere desactivar la conversión de comillas solo en las solicitudes AJAX (y no en todo el sitio):
add_action('init', function() {
$locale = get_locale();
$problematic_locales = ['cs_CZ', 'sk_SK', 'de_DE', 'fr_FR'];
if (in_array($locale, $problematic_locales) && wp_doing_ajax()) {
add_filter('run_wptexturize', '__return_false');
}
});
Añadir más idiomas
Si tiene el mismo problema con otros idiomas, añádalos al array $problematic_locales:
$problematic_locales = ['cs_CZ', 'sk_SK', 'de_DE', 'fr_FR', 'pl_PL', 'hu_HU'];
Verificación
Después de añadir el código:
- Vacíe la caché del navegador
- Vacíe la caché de WordPress (si usa un plugin de caché)
- Recargue la página con la tabla de WOOT
- Revise la consola del navegador (F12): no deberían aparecer errores de JSON
- Los productos deberían mostrarse correctamente
Notas
- Esta corrección afecta a todos los plugins que usan respuestas JSON en estas localizaciones
- No afecta al contenido normal de entradas y páginas
- Es seguro de usar: solo desactiva la conversión de comillas tipográficas
- Funciona con todas las versiones de WordPress