Bloc
| Nom | Rendu | Attributs |
|---|---|---|
websource/cart | Serveur (render_callback) | Aucun attribut propre. Prend en charge align (left, center, right). |
<!-- wp:websource/cart /-->
Dans l'éditeur, le bloc affiche le bouton seul (sans mini-panier ni script).
Code court
| Code court | Attributs |
|---|---|
[websource_cart] | Aucun. |
Fonction publique
echo websource_cart_block(); // HTML déjà échappé ; chaîne vide si WooCommerce est absent
Le bloc peut être affiché plusieurs fois sur une page : chaque instance a son identifiant (b1, b2…).
Réglages enregistrés
Une seule option, wsx_cartblock_settings (tableau) :
| Clé | Valeurs | Défaut |
|---|---|---|
placement | replace, header, menu, none | replace (thème à blocs) |
menu_location | identifiant d'un emplacement de menu | vide |
mode_desktop | drawer, push, dropdown | drawer |
mode_mobile | drawer, push | drawer |
breakpoint | 320 à 1600 | 768 |
push_side | right, left | right |
push_selector | sélecteur CSS (200 caractères au plus) ; vide = main | vide |
show_total, auto_open, show_free_shipping | booléen | true |
texts | title, empty, view_cart, checkout, free_remaining, free_reached => texte (120 caractères au plus) | vide |
Toute valeur absente ou invalide est remplacée par sa valeur par défaut à la lecture.
Points d'entrée AJAX
L'extension ne déclare aucune route REST. Elle utilise les requêtes wc-ajax de WooCommerce, qui chargent le panier et la session du visiteur. Les réponses ne sont jamais mises en cache (Cache-Control: no-store).
Rafraîchir le bloc
| Méthode | GET |
| Adresse | /?wc-ajax=wsx_cartblock_refresh |
| Paramètres | uid (facultatif) : identifiant du bloc à régénérer, 1 à 12 lettres minuscules ou chiffres |
| Sécurité | Lecture seule du panier du visiteur, sans jeton |
curl -b cookies.txt "https://exemple.fr/?wc-ajax=wsx_cartblock_refresh&uid=b1"
{
"html": "<div class=\"wscb has-items\" data-wscb data-uid=\"b1\" …>…</div>",
"nonce": "5f2c9d1a7b",
"count": 3
}
Modifier une ligne du panier
| Méthode | POST |
| Adresse | /?wc-ajax=wsx_cartblock_update |
| Paramètres | op : up, down ou remove ; item : clé de la ligne du panier ; nonce : jeton reçu dans le HTML ou dans une réponse précédente ; uid (facultatif) |
| Sécurité | Jeton woocommerce-wsx-cartblock, lié à la session WooCommerce du visiteur |
curl -b cookies.txt -X POST \
-d "op=up&item=6f4922f45568161a8cdf4ad2299f6d23&uid=b1&nonce=5f2c9d1a7b" \
"https://exemple.fr/?wc-ajax=wsx_cartblock_update"
Réponse : les mêmes clés que le rafraîchissement, plus error quand le changement est refusé.
{
"error": "Il n'y a pas assez de stock pour Plaid en laine.",
"html": "…",
"nonce": "5f2c9d1a7b",
"count": 5
}
| Code HTTP | Cas |
|---|---|
| 200 | Changement fait, ou refusé avec un message (error) : stock, quantité inférieure à 1, vente à l'unité. |
| 400 | Opération inconnue. |
| 403 | Jeton invalide ou périmé (code = nonce). La réponse contient un jeton neuf ; le script réessaie une fois. |
| 404 | La ligne n'est plus dans le panier. |
| 405 | Méthode autre que POST. |
Filtres
| Filtre | Paramètres | Rôle |
|---|---|---|
wsx_cartblock_free_shipping_threshold | float $threshold, WC_Cart $cart | Seuil de livraison offerte, dans la devise du panier. 0 masque la barre. |
wsx_cartblock_texts | array $texts, string $locale | Textes du bloc (six clés). |
wsx_cartblock_auto_place | bool $allow, string $where (replace, header, menu) | Renvoyer false empêche un placement automatique. |
websource_theme_export | array $sections | Ajoute la section cartblock à un paquet de thème Websource. |
websource_theme_import | array $report, array $params | Applique la section cartblock (section, version, data, mode = replace ou merge, dry_run). |
Les filtres de WooCommerce woocommerce_cart_item_product, woocommerce_cart_item_name, woocommerce_cart_item_permalink, woocommerce_cart_item_price, woocommerce_widget_cart_item_visible et woocommerce_update_cart_validation sont appliqués.
Exemple : seuil converti par une extension multidevise.
add_filter('wsx_cartblock_free_shipping_threshold', function ($threshold) {
return function_exists('ma_conversion') ? ma_conversion($threshold) : $threshold;
});
JavaScript
Objet public, disponible quand un bloc est affiché :
| Appel | Rôle |
|---|---|
WebsourceCartBlock.refresh() | Recharge le contenu de tous les blocs. |
WebsourceCartBlock.open() | Ouvre le mini-panier. |
WebsourceCartBlock.close() | Ferme le mini-panier. |
Évènements écoutés sur document.body : wc-blocks_added_to_cart, wc-blocks_removed_from_cart (natifs) ; added_to_cart, removed_from_cart, updated_wc_div, updated_cart_totals, wc_cart_emptied (jQuery, seulement si jQuery est déjà sur la page).
Évènements émis après un changement fait dans le mini-panier :
| Évènement | Cible | Détail |
|---|---|---|
wc-blocks_added_to_cart / wc-blocks_removed_from_cart | document.body | { preserveCartData: false } — les blocs WooCommerce se rechargent. |
wc_fragment_refresh | document.body (jQuery) | Les fragments classiques de WooCommerce se rechargent. |
wsx:cartblock:updated | document | { uid, reason } avec reason = added ou removed. |
Scripts et styles
| Identifiant | Fichier | Chargé quand |
|---|---|---|
wsx-cartblock (CSS, JS) | assets/css/front.css, assets/js/front.js | Le bloc est rendu. |
wsx-cartblock-push (CSS) | assets/css/push.css | Le bloc est rendu et un appareil utilise le push menu. |
Variables CSS
Les mêmes que le thème Websource, toujours avec une valeur de repli.
| Variable | Rôle | Repli |
|---|---|---|
--color-ink | Couleur du texte | #14282b |
--color-brand-600 | Couleur principale (compteur, boutons, barre) | #0f766e |
--color-brand-50 | Fond du compteur vide, fond de la barre | #effaf8 |
--color-line | Bordures | #d9e6e4 |
--color-surface | Fond du bouton et du mini-panier | #fff |
--radius-xl, --radius-2xl | Arrondis | 1rem, 1.5rem |
--wst-card-shadow | Ombre | aucune |
--wscb-w | Largeur du push menu | min(26rem, 88vw) |
Multilingue
- Polylang : chaque texte saisi est déclaré par
pll_register_string()(groupe « Websource Cart Block ») et traduit parpll__(). - WPML :
wpml-config.xmldéclarewsx_cartblock_settings > texts > *comme textes d'administration. - Textes proposés intégrés : fr, en, es, de, it, nl, pt ; anglais pour les autres langues.
Écarts avec le module PrestaShop
- Pas de multiboutique.
- Le seuil de livraison offerte vient du mode « Livraison gratuite » de la zone d'expédition du client, et non d'un réglage global. Aucune conversion de devise n'est faite par l'extension (filtre ci-dessus).
- Les emplacements
displayNav2/displayTopdeviennent : à la place du Mini-panier, après la navigation, fin d'un menu, placement manuel. - Les textes saisis ne le sont pas par langue : la traduction passe par Polylang ou WPML.