WOOT - WooCommerce Active Products Tables

Problèmes d'affichage avec WordPress localisé (tchèque, slovaque, allemand, français)

Problème

WOOT (WooCommerce Products Tables) n'affiche pas correctement les produits sur les sites qui utilisent certaines localisations linguistiques. Le tableau apparaît vide ou la console du navigateur signale des erreurs d'analyse JSON.

Langues concernées :

  • tchèque (cs_CZ)
  • slovaque (sk_SK)
  • allemand (de_DE)
  • français (fr_FR)
  • les autres langues qui utilisent des guillemets typographiques

Cause

WordPress convertit automatiquement les guillemets ASCII standard (") en guillemets typographiques propres à la langue (par exemple les guillemets tchèques „quotes" ou les guillemets allemands „Anführungszeichen") au moyen de la fonction wptexturize(). Cela casse l'analyse JSON, car le JSON exige des guillemets doubles ASCII standard.

Exemple du problème :

// Valid JSON (works): 
{"name": "Product"} 
// Broken JSON (Czech localization): 
{„name": „Product"}

 

Lorsque WOOT renvoie les données des produits au format JSON, WordPress convertit les guillemets : le JSON devient invalide et l'analyseur JavaScript échoue.

Solution

Ajoutez ce code au fichier functions.php de votre thème pour désactiver la conversion des guillemets pour les langues problématiques :

/**
 * 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');
    }
});

Fonctionnement

  1. Détecte la langue WordPress active avec get_locale()
  2. Vérifie si cette langue figure dans la liste des langues problématiques
  3. Désactive la fonction wptexturize() qui convertit les guillemets
  4. Le JSON reste valide grâce aux guillemets ASCII standard
  5. WOOT peut analyser correctement les données des produits

Autre solution (AJAX uniquement)

Si vous souhaitez désactiver la conversion des guillemets uniquement pour les requêtes AJAX (et non sur l'ensemble du site) :

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');
    }
});

Ajouter d'autres langues

Si vous rencontrez le même problème avec d'autres langues, ajoutez-les au tableau $problematic_locales :

$problematic_locales = ['cs_CZ', 'sk_SK', 'de_DE', 'fr_FR', 'pl_PL', 'hu_HU'];

Vérification

Après avoir ajouté le code :

  1. Videz le cache du navigateur
  2. Videz le cache WordPress (si vous utilisez un plugin de cache)
  3. Rechargez la page contenant le tableau WOOT
  4. Consultez la console du navigateur (F12) : aucune erreur JSON ne doit apparaître
  5. Les produits doivent s'afficher correctement

Remarques

  • Ce correctif s'applique à tous les plugins qui renvoient des réponses JSON dans ces langues
  • Il n'affecte pas le contenu habituel des articles et des pages
  • Son usage est sûr : il désactive uniquement la conversion des guillemets typographiques
  • Il fonctionne avec toutes les versions de WordPress