Bloc et shortcode
| Élément | Attributs | Valeurs |
|---|---|---|
Bloc websource/locale-selector | what | auto (défaut), combined, language, currency |
Shortcode [websource_locale] | what, visibility | visibility : all (défaut), desktop, mobile |
[websource_locale what="language" visibility="desktop"]
Le bloc est rendu côté serveur (blocks/locale-selector/block.json, éditeur assets/js/block.js sans étape de build). La feuille wsx-locale et le script wsx-locale (différé, sans jQuery) ne sont chargés que sur les pages où le sélecteur ou la bannière est rendu. Aucune route REST.
Fonction publique
echo websource_locale_selector('auto', 'all'); // HTML du sélecteur, '' s'il n'y a rien à afficher
Emplacements automatiques
| Position | Hook | Thème |
|---|---|---|
topbar_right | websource_theme_area_topbar_right | Websource Theme |
mobile_menu | websource_theme_drawer | Websource Theme |
footer_locale | websource_theme_area_footer_after | Websource Theme |
body_open | wp_body_open | tout thème |
footer | wp_footer (priorité 5) | tout thème |
custom | action de votre choix ([A-Za-z][A-Za-z0-9_]{2,80}) | — |
Dans votre thème : do_action('my_theme_hook'); puis saisissez my_theme_hook dans « Hook personnalisé ».
Filtres
| Filtre | Paramètres | Rôle |
|---|---|---|
websource_locale_languages | array[] $items | Langues proposées. Clés : id, iso_code, locale, name, url, current, fallback, rtl, default. |
websource_locale_currencies | array[] $items | Devises proposées. Clés : id, iso_code, sign, name, url, current, default. |
websource_locale_template | string $path, string $name | Chemin du gabarit selector ou suggestion. |
websource_theme_export, websource_theme_import | — | Section locale des paquets de thème. |
Brancher une extension multidevise non reconnue :
add_filter('websource_locale_currencies', function (array $items) {
foreach (['EUR' => '€', 'CHF' => 'CHF'] as $code => $sign) {
$items[] = ['id' => $code, 'iso_code' => $code, 'sign' => $sign, 'name' => '', 'url' => add_query_arg('my_currency', $code), 'current' => my_current_currency() === $code, 'default' => $code === 'EUR'];
}
return $items;
});
Extensions reconnues
| Rôle | Extension | Lecture | Changement |
|---|---|---|---|
| Langues | Polylang | pll_the_languages(['raw' => 1]) | lien de traduction, sinon accueil de la langue |
| Langues | WPML | filtre wpml_active_languages | lien fourni par WPML |
| Devises | FOX / WOOCS | $WOOCS->get_currencies() | ?currency=XXX |
| Devises | WooCommerce Multilingual | $woocommerce_wpml->multi_currency | ?wcmlc=XXX |
| Devises | CURCY | WOOMULTI_CURRENCY_Data::get_ins() | ?wmc-currency=XXX |
| Devises | WooPayments | WC_Payments_Multi_Currency() | ?currency=XXX |
| Devises | Aelia Currency Switcher | filtre wc_aelia_cs_enabled_currencies | ?aelia_cs_currency=XXX |
Gabarits
templates/selector.php et templates/suggestion.php se surchargent en les copiant dans <thème>/websource-locale/.
Variables CSS
| Variable | Repli | Rôle |
|---|---|---|
--wslc-bg | var(--color-surface, #fff) | Fond du panneau |
--wslc-ink | var(--color-ink, #14282b) | Texte |
--wslc-line | var(--color-line, #d9e6e4) | Bordures |
--wslc-accent | var(--color-brand-600, #0f766e) | Choix actif, focus |
--wslc-tint | var(--color-brand-50, #effaf8) | Survol |
--wslc-radius | var(--radius-lg, .75rem) | Arrondi |
--wslc-font | .875rem | Taille du texte |
Classes : .wslc, .wslc--combined|language|currency, .wslc--up, .wslc--desktop-only, .wslc--mobile-only, .wslc-bar, .wslc-suggest.
Données
| Élément | Emplacement |
|---|---|
| Réglages | Option wsx_locale_settings (tableau normalisé à la lecture et à l'écriture). |
| Témoin | wslc_dismissed=1, SameSite=Lax, durée réglable ; posé par le navigateur quand le visiteur répond à la bannière. |
Textes par langue : texts[<clé>][<code de langue>], déclarés dans wpml-config.xml et enregistrés auprès de Polylang (pll_register_string).
La géolocalisation appelle WC_Geolocation::geolocate_ip('', false, false) : base MaxMind locale uniquement, sans service de repli ; l'adresse IP n'est ni stockée ni journalisée.
Section de paquet de thème
{"locale": {"version": 1, "data": {"arrangement": "combined", "style_desktop": "dropdown", "placements": [{"position": "footer_locale", "what": "auto", "visibility": "all"}]}}}
Les positions d'un paquet PrestaShop sont converties (nav1, nav2, top → topbar_right ; footer* → footer_locale). Hors du thème Websource, elles deviennent body_open ou footer.