WOOT - WooCommerce Active Products Tables

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

  1. Detecta la localización actual de WordPress con get_locale()
  2. Comprueba si la localización figura en la lista de idiomas problemáticos
  3. Desactiva la función wptexturize(), que convierte las comillas
  4. El JSON sigue siendo válido con comillas ASCII estándar
  5. 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:

  1. Vacíe la caché del navegador
  2. Vacíe la caché de WordPress (si usa un plugin de caché)
  3. Recargue la página con la tabla de WOOT
  4. Revise la consola del navegador (F12): no deberían aparecer errores de JSON
  5. 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