> ## Documentation Index
> Fetch the complete documentation index at: https://docs.aftersell.com/llms.txt
> Use this file to discover all available pages before exploring further.

# La quantité/le compteur de l'icône du panier ne se met pas à jour

> Cet article explique comment corriger la quantité de l'icône de votre panier lorsqu'elle ne se met pas à jour dans Upcart.

<div id="overview">
  # Aperçu
</div>

Certains thèmes ne mettent pas à jour l'icône automatiquement, et ce guide vous expliquera comment corriger cela à l'aide d'un peu de code personnalisé. Suivez les étapes ci-dessous pour que tout se synchronise correctement.

**Voici un exemple de ce à quoi ressemble ce décalage :**

<img src="https://mintcdn.com/aftersell/uxKAdY-e0h16xa48/images/upcart/cart-counter-drawer-vs-theme-icon.gif?s=2b4c08af3555b89b66d7926793bc3833" alt="Panier coulissant Upcart affichant Cart 2 alors que la bulle de l'icône du panier du thème affiche toujours 1" width="2560" height="1080" data-path="images/upcart/cart-counter-drawer-vs-theme-icon.gif" />

***

<div id="important-steps-before-you-start">
  # Étapes importantes avant de commencer !
</div>

Pour corriger le problème de l'icône du panier, vous devrez identifier le nom de classe de votre icône de panier. Chaque thème est différent, et cette étape garantit que le code fonctionne spécifiquement pour votre boutique.

<div id="1-use-chrome-developer-tools">
  ### **1. Utilisez les outils de développement Chrome**
</div>

Chaque thème est différent, vous devrez donc utiliser les outils de développement Chrome (Inspecter) pour identifier le nom de classe de votre icône de panier.

* Faites un clic droit sur l'icône de votre panier sur votre boutique en ligne et sélectionnez **Inspect** dans Google Chrome.
* Trouvez l'élément HTML de votre icône de panier (par exemple, **`<span class="cart-count-bubble">`**).
* **Besoin d'aide pour utiliser les outils de développement Chrome ?** Consultez [ce guide](https://developer.chrome.com/docs/devtools/overview/) pour des instructions étape par étape.

<div id="2-reach-out-for-help-optional">
  ### **2. Demandez de l'aide (facultatif)**
</div>

Si vous ne parvenez pas à localiser la classe de votre icône de panier ou si vous vous sentez bloqué, pas d'inquiétude ! Vous avez des options :

* **Contactez le développeur de votre thème :** il connaît votre thème mieux que quiconque et peut vous aider à trouver la bonne classe.
* **Engagez un expert Shopify :** si vous avez besoin d'une assistance supplémentaire, Shopify dispose d'un annuaire d'experts de confiance qui peuvent vous aider. [Trouvez un expert Shopify ici](https://experts.shopify.com/).

<div id="custom-code-disclaimer">
  ## 🚧 **Avertissement sur le code personnalisé**
</div>

L'exemple de code fourni ci-dessous n'est qu'un modèle, **il ne fonctionnera pas si vous le copiez-collez directement**. Vous devez remplacer le nom de classe fictif (par exemple, **`.cart-count-bubble > span`**) par le nom de classe spécifique de votre icône de panier.

***

<div id="step-by-step-fix">
  # Correction étape par étape
</div>

Nous avons divisé ce processus en trois niveaux de corrections, en commençant par la solution la plus simple (niveau 1). Chaque niveau s'appuie sur le précédent : essayez d'abord le niveau 1, puis passez au niveau 2 ou 3 uniquement si nécessaire.

<div id="step-1-add-custom-code-in-upcart">
  ## **Étape 1 : ajoutez du code personnalisé dans Upcart**
</div>

Tout d'abord, comme nous devrons ajouter du code HTML personnalisé dans l'éditeur Upcart, préparons cette section :

1. Allez dans **Upcart Editor > Settings**, puis ouvrez l'onglet **Custom HTML** (derrière **More settings** s'il ne tient pas sur la rangée d'onglets).
2. Définissez l'emplacement sur **Scripts (Before Load)**.
3. Collez votre code modifié ici (nous fournirons des exemples pour chaque niveau ci-dessous).

Voici à quoi cela ressemble :

<img src="https://mintcdn.com/aftersell/uxKAdY-e0h16xa48/images/upcart/cart-counter-custom-html-settings-location.gif?s=d70ce32a4328c99bf2d0b9d18efcd853" alt="Paramètres Custom HTML d'Upcart avec l'emplacement HTML défini sur Scripts Before Load" width="1588" height="1080" data-path="images/upcart/cart-counter-custom-html-settings-location.gif" />

***

<div id="step-2-apply-the-fix-by-level">
  # **Étape 2 : appliquez la correction selon le niveau**
</div>

<div id="level-1-basic">
  ## Niveau 1 (basique)
</div>

Lorsque le panier se charge, ce script additionne les quantités des articles de ligne du panier et écrit le résultat dans l'élément de compteur à l'intérieur de la bulle du panier de votre thème. Il convient aux thèmes où le compteur se trouve dans un élément imbriqué simple (par exemple, `.cart-count-bubble > span`).

**N'oubliez pas**

* Remplacez **`.cart-count-bubble > span`** par la classe de votre icône de panier.
* Testez-le sur votre boutique en ligne après avoir ajouté le code.

<img src="https://mintcdn.com/aftersell/uxKAdY-e0h16xa48/images/upcart/cart-counter-level-1-count-bubble-script.gif?s=ef698547d55d921009278b3a006e4a9d" alt="Collage du script de compteur de niveau 1 dans le Custom HTML d'Upcart en utilisant le sélecteur cart-count-bubble" width="1996" height="1080" data-path="images/upcart/cart-counter-level-1-count-bubble-script.gif" />

<div id="example-code-for-level-1">
  ## Exemple de code pour le niveau 1
</div>

```text theme={"theme":{"light":"snazzy-light","dark":"github-dark"}}
<script>  
window.upcartSubscribeCartLoaded((event) => {  
    const countEl = document.querySelector('.cart-count-bubble > span');  
    const itemCount = event.cart.items.reduce((total, item) => total + item.quantity, 0);  
    countEl.innerText = itemCount;  
});  
</script>
```

<Note>
  **Remarque sur l'ancien système :** les rappels `window.upcartOnCartLoaded` fonctionnent toujours mais sont obsolètes et génèrent des avertissements dans la console. Utilisez `upcartSubscribeCartLoaded` pour tous les nouveaux scripts. Notez que `event.cart` n'a pas de propriété `item_count` ; utilisez `event.cart.items.reduce((total, item) => total + item.quantity, 0)` pour calculer le nombre total d'articles.
</Note>

***

<div id="level-2-moderate">
  ## Niveau 2 (intermédiaire)
</div>

Si le niveau 1 n'a pas fonctionné, votre thème remplace peut-être l'intégralité du HTML de l'icône du panier lorsque le compteur change. Cette version reconstruit le balisage de l'icône pour les états de panier vide et non vide afin que le compteur et l'icône restent synchronisés.

**N'oubliez pas**

* Remplacez **`#cart-icon-bubble-custom`** par le sélecteur du conteneur de l'icône de panier de votre thème.
* Testez après l'enregistrement.

<Frame>
  <img src="https://mintcdn.com/aftersell/uxKAdY-e0h16xa48/images/upcart/cart-counter-level-2-icon-bubble-script.gif?s=7d36ca92c77564a670a1940818b7d86b" alt="Collage du script d'icône de panier de niveau 2 dans le Custom HTML d'Upcart en utilisant le sélecteur cart-icon-bubble-custom" width="1876" height="1080" data-path="images/upcart/cart-counter-level-2-icon-bubble-script.gif" />
</Frame>

<div id="example-code-for-level-2">
  ### Exemple de code pour le niveau 2
</div>

```text theme={"theme":{"light":"snazzy-light","dark":"github-dark"}}
<script>  
;(() => {  
function updateCartCount(itemCount) {  
    const iconWrapperEl = document.querySelector('#cart-icon-bubble-custom');  
    if (itemCount === 0) {  
        iconWrapperEl.innerHTML = `<span class="svg-wrapper"><svg xmlns="http://www.w3.org/2000/svg" fill="none" class="icon icon-cart-empty" viewBox="0 0 40 40"><path fill="currentColor" fill-rule="evenodd" d="M15.75 11.8h-3.16l-.77 11.6a5 5 0 0 0 4.99 5.34h7.38a5 5 0 0 0 4.99-5.33L28.4 11.8zm0 1h-2.22l-.71 10.67a4 4 0 0 0 3.99 4.27h7.38a4 4 0 0 0 4-4.27l-.72-10.67h-2.22v.63a4.75 4.75 0 1 1-9.5 0zm8.5 0h-7.5v.63a3.75 3.75 0 1 0 7.5 0z"></path></svg></span><span class="visually-hidden">Cart</span>`;  
    } else {  
        iconWrapperEl.innerHTML = `<span class="svg-wrapper"><svg xmlns="http://www.w3.org/2000/svg" fill="none" class="icon icon-cart" viewBox="0 0 40 40"><path fill="currentColor" fill-rule="evenodd" d="M20.5 6.5a4.75 4.75 0 0 0-4.75 4.75v.56h-3.16l-.77 11.6a5 5 0 0 0 4.99 5.34h7.38a5 5 0 0 0 4.99-5.33l-.77-11.6h-3.16v-.57A4.75 4.75 0 0 0 20.5 6.5m3.75 5.31v-.56a3.75 3.75 0 1 0-7.5 0v.56zm-7.5 1h7.5v.56a3.75 3.75 0 1 1-7.5 0zm-1 0v.56a4.75 4.75 0 1 0 9.5 0v-.56h2.22l.71 10.67a4 4 0 0 1-3.99 4.27h-7.38a4 4 0 0 1-4-4.27l.72-10.67z"></path></svg></span><span class="visually-hidden">Cart</span><div class="cart-count-bubble"><span aria-hidden="true">${itemCount}</span><span class="visually-hidden">${itemCount} item</span></div>`;  
    }  
}  
  
window.upcartSubscribeCartLoaded((event) => {  
    const itemCount = event.cart.items.reduce((total, item) => total + item.quantity, 0);  
    updateCartCount(itemCount);  
});  
})();  
</script>
```

<Note>
  **Remarque sur l'ancien système :** les rappels `window.upcartOnCartLoaded` fonctionnent toujours mais sont obsolètes et génèrent des avertissements dans la console. Utilisez `upcartSubscribeCartLoaded` pour tous les nouveaux scripts.

  Notez que `event.cart` n'a **pas** de propriété `item_count` — les scripts ci-dessus calculent le total avec `event.cart.items.reduce((total, item) => total + item.quantity, 0)` et le transmettent en tant que `itemCount`. Les anciennes copies de ces extraits qui interpolent `cart.item_count` génèrent une `ReferenceError` et ne mettent jamais l'icône à jour, sans erreur visible.
</Note>

***

<div id="level-3-advanced">
  ## Niveau 3 (avancé)
</div>

Si votre thème utilise un balisage d'icône de panier **distinct** pour l'ordinateur et le mobile, exécutez la même logique de mise à jour sur deux sélecteurs afin que chaque fenêtre d'affichage reçoive le bon HTML et le bon compteur.

**N'oubliez pas**

* Remplacez **`#cart-icon-bubble-custom-desktop`** et **`#cart-icon-bubble-custom-mobile`** par les classes de votre thème.
* Testez soigneusement sur les vues ordinateur et mobile.

<img src="https://mintcdn.com/aftersell/uxKAdY-e0h16xa48/images/upcart/cart-counter-level-3-desktop-mobile-script.gif?s=36058384ee181aa8fc630e3c7bfc8716" alt="Collage du script de niveau 3 dans le Custom HTML d'Upcart avec des sélecteurs d'icône de panier distincts pour ordinateur et mobile" width="1996" height="1080" data-path="images/upcart/cart-counter-level-3-desktop-mobile-script.gif" />

<div id="example-code-for-level-3">
  ### Exemple de code pour le niveau 3
</div>

```text theme={"theme":{"light":"snazzy-light","dark":"github-dark"}}
<script>  
;(() => {  
function updateCartCount(itemCount) {  
    // Desktop  
    const desktopIconWrapperEl = document.querySelector('#cart-icon-bubble-custom-desktop');  
    if (itemCount === 0) {  
        desktopIconWrapperEl.innerHTML = `<span>Cart</span><span class="svg-wrapper"><svg xmlns="http://www.w3.org/2000/svg" fill="none" class="icon icon-cart-empty" viewBox="0 0 40 40"><path fill="currentColor" fill-rule="evenodd" d="M15.75 11.8h-3.16l-.77 11.6a5 5 0 0 0 4.99 5.34h7.38a5 5 0 0 0 4.99-5.33L28.4 11.8zm0 1h-2.22l-.71 10.67a4 4 0 0 0 3.99 4.27h7.38a4 4 0 0 0 4-4.27l-.72-10.67h-2.22v.63a4.75 4.75 0 1 1-9.5 0zm8.5 0h-7.5v.63a3.75 3.75 0 1 0 7.5 0z"></path></svg></span>`;  
    } else {  
        desktopIconWrapperEl.innerHTML = `<span>Cart (${itemCount})</span><span class="svg-wrapper"><svg xmlns="http://www.w3.org/2000/svg" fill="none" class="icon icon-cart" viewBox="0 0 40 40"><path fill="currentColor" fill-rule="evenodd" d="M20.5 6.5a4.75 4.75 0 0 0-4.75 4.75v.56h-3.16l-.77 11.6a5 5 0 0 0 4.99 5.34h7.38a5 5 0 0 0 4.99-5.33l-.77-11.6h-3.16v-.57A4.75 4.75 0 0 0 20.5 6.5m3.75 5.31v-.56a3.75 3.75 0 1 0-7.5 0v.56zm-7.5 1h7.5v.56a3.75 3.75 0 1 1-7.5 0zm-1 0v.56a4.75 4.75 0 1 0 9.5 0v-.56h2.22l.71 10.67a4 4 0 0 1-3.99 4.27h-7.38a4 4 0 0 1-4-4.27l.72-10.67z"></path></svg></span>`;  
    }  
  
    // Mobile  
    const mobileIconWrapperEl = document.querySelector('#cart-icon-bubble-custom-mobile');  
    if (itemCount === 0) {  
        mobileIconWrapperEl.innerHTML = `<span class="svg-wrapper"><svg xmlns="http://www.w3.org/2000/svg" fill="none" class="icon icon-cart-empty" viewBox="0 0 40 40"><path fill="currentColor" fill-rule="evenodd" d="M15.75 11.8h-3.16l-.77 11.6a5 5 0 0 0 4.99 5.34h7.38a5 5 0 0 0 4.99-5.33L28.4 11.8zm0 1h-2.22l-.71 10.67a4 4 0 0 0 3.99 4.27h7.38a4 4 0 0 0 4-4.27l-.72-10.67h-2.22v.63a4.75 4.75 0 1 1-9.5 0zm8.5 0h-7.5v.63a3.75 3.75 0 1 0 7.5 0z"></path></svg></span><span class="visually-hidden">Cart</span>`;  
    } else {  
        mobileIconWrapperEl.innerHTML = `<span class="svg-wrapper"><svg xmlns="http://www.w3.org/2000/svg" fill="none" class="icon icon-cart" viewBox="0 0 40 40"><path fill="currentColor" fill-rule="evenodd" d="M20.5 6.5a4.75 4.75 0 0 0-4.75 4.75v.56h-3.16l-.77 11.6a5 5 0 0 0 4.99 5.34h7.38a5 5 0 0 0 4.99-5.33l-.77-11.6h-3.16v-.57A4.75 4.75 0 0 0 20.5 6.5m3.75 5.31v-.56a3.75 3.75 0 1 0-7.5 0v.56zm-7.5 1h7.5v.56a3.75 3.75 0 1 1-7.5 0zm-1 0v.56a4.75 4.75 0 1 0 9.5 0v-.56h2.22l.71 10.67a4 4 0 0 1-3.99 4.27h-7.38a4 4 0 0 1-4-4.27l.72-10.67z"></path></svg></span><span class="visually-hidden">Cart</span><div class="cart-count-bubble"><span aria-hidden="true">${itemCount}</span><span class="visually-hidden">${itemCount} item</span></div>`;  
    }  
}  
  
window.upcartSubscribeCartLoaded((event) => {  
    const itemCount = event.cart.items.reduce((total, item) => total + item.quantity, 0);  
    updateCartCount(itemCount);  
});  
})();  
</script>
```

<Note>
  **Remarque sur l'ancien système :** les rappels `window.upcartOnCartLoaded` fonctionnent toujours mais sont obsolètes et génèrent des avertissements dans la console. Utilisez `upcartSubscribeCartLoaded` pour tous les nouveaux scripts.

  Notez que `event.cart` n'a **pas** de propriété `item_count` — les scripts ci-dessus calculent le total avec `event.cart.items.reduce((total, item) => total + item.quantity, 0)` et le transmettent en tant que `itemCount`. Les anciennes copies de ces extraits qui interpolent `cart.item_count` génèrent une `ReferenceError` et ne mettent jamais l'icône à jour, sans erreur visible.
</Note>

***

<div id="still-not-working">
  # Toujours pas de résultat ?
</div>

Si aucun de ces niveaux ne résout le problème, pas d'inquiétude, vous avez encore des options ! Cela signifie probablement que votre thème nécessite une personnalisation plus avancée.

**Voici ce que vous pouvez faire ensuite :**

* Contactez le développeur de votre thème pour obtenir de l'aide.
* Engagez un [expert Shopify](https://www.shopify.com/partners/directory) qui pourra créer une solution personnalisée adaptée à votre boutique.
