Discount Kit Live surfaces both automatic discounts (applied at checkout when conditions are met) and code-based discounts (the shopper enters a code). The method and code fields let you render the right UI for each.
Use <button> rather than rendering the code as plain text so it’s keyboard-accessible. Set data-discount-code from Liquid so the copy handler reads the raw value (not the visible label, which you may want to obfuscate or shorten).
Once a shopper has the code in their cart, the chip is just noise. Check cart.discount_applications to detect already-applied codes and hide the chip accordingly.cart.discount_applications is a Shopify-native array of every discount currently affecting the cart. Each entry has a title (for automatics) or a code (for DiscountCodeApplication entries). For code discounts you compare against application.code.
{%- comment -%} Build a Set-like map of code strings currently applied to the cart. Liquid doesn't have Sets, so we use a comma-joined string and `contains`.{%- endcomment -%}{% capture applied_codes %} {%- for application in cart.discount_applications -%} {%- if application.type == 'discount_code' -%},{{ application.code | downcase }},{%- endif -%} {%- endfor -%}{% endcapture %}{% assign discounts = product.metafields.app--9549316097--discount_kit.discounts.value %}{% for discount in discounts %} {% if discount.method == 'code' and discount.code != blank %} {% assign needle = ',' | append: discount.code | downcase | append: ',' %} {% unless applied_codes contains needle %} <div class="discount-code-chip"> <strong>{{ discount.discount_title }}</strong> <span>Use code <code>{{ discount.code }}</code></span> </div> {% endunless %} {% endif %}{% endfor %}
The , wrappers around each code prevent partial matches: e.g. SALE shouldn’t match SUMMERSALE10. The comparison is downcased on both sides because Shopify treats discount codes case-insensitively at checkout.