Added an additional Badge on product tile, alter the position without effecting the 'Sale' Badge?

Topic summary

Goal: Add an extra product ā€œbadgeā€ (overlay label) and change its position without disrupting the existing ā€œSaleā€ badge.

Key update: Guidance provided to edit the Shopify theme’s card-product.liquid (the product card template) and adjust the badge-related markup and conditions. A full code snippet was shared, indicating where to render titles, vendor, ratings, price, and status badges (Sold Out / On Sale).

Technical context: card-product.liquid controls product tile layout. A ā€œbadgeā€ is an on-image label. The ā€œSaleā€ badge appears when compare_at_price > price.

Action taken: The requester changed badge positioning from bottom-left to top-left by editing the relevant position code segments in card-product.liquid.

Outcome: The change worked as intended, with the badge now at top-left. No issues were reported post-change.

Artifacts: The shared code snippet is central to understanding how and where to adjust badge placement within the product card.

Status: Resolved; no outstanding questions or disagreements noted.

Summarized with AI on February 3. AI used: gpt-5.

@Litos

Any help would be appreciated?

Hi @JamessyB ,

Please go to card-product.liquid file and change all code:

{% comment %}
  Renders a product card
 
  Accepts:
  - card_product: {Object} Product Liquid object (optional)
  - media_aspect_ratio: {String} Size of the product image card. Values are "square" and "portrait". Default is "square" (optional)
  - show_secondary_image: {Boolean} Show the secondary image on hover. Default: false (optional)
  - show_vendor: {Boolean} Show the product vendor. Default: false
  - show_rating: {Boolean} Show the product rating. Default: false
  - extend_height: {Boolean} Card height extends to available container space. Default: true (optional)
  - lazy_load: {Boolean} Image should be lazy loaded. Default: true (optional)
  - show_quick_add: {Boolean} Show the quick add button.
  - section_id: {String} The ID of the section that contains this card.
  - horizontal_class: {Boolean} Add a card--horizontal class if set to true. Default: false
 
  Usage:
  {% render 'card-product', show_vendor: section.settings.show_vendor %}
{% endcomment %}
 
{{ 'component-rating.css' | asset_url | stylesheet_tag }}
 
{%- if card_product and card_product != empty -%}
  {%- liquid
    assign ratio = 1
    if card_product.featured_media and media_aspect_ratio == 'portrait'
      assign ratio = 0.8
    elsif card_product.featured_media and media_aspect_ratio == 'adapt'
      assign ratio = card_product.featured_media.aspect_ratio
    endif
    if ratio == 0 or ratio == nil
      assign ratio = 1
    endif
  -%}
  
    

      

        {%- if card_product.featured_media -%}
          

            

              {% comment %}theme-check-disable ImgLazyLoading{% endcomment %}
              
              {% comment %}theme-check-enable ImgLazyLoading{% endcomment %}
 
              {%- if card_product.media[1] != nil and show_secondary_image -%}
                
              {%- endif -%}
            

          

        {%- endif -%}
        
          

            ### 
              
                {{ card_product.title | escape }}
              
            
          

          
            {%- if card_product.tags contains "Pre Loved" -%}
              PRE LOVED
            {% endif %}
            {%- if card_product.tags contains "New" -%}
              NEW
            {% endif %}
          

          
            {%- if card_product.available == false -%}
              
                {{- 'products.product.sold_out' | t -}}
              
            {%- elsif card_product.compare_at_price > card_product.price and card_product.available -%}
              
                {{- 'products.product.on_sale' | t -}}
              
            {%- endif -%}
          

        

      

      
        

          ### 
            
              {{ card_product.title | escape }}
            
          
          
            {%- if show_vendor -%}
              {{ 'accessibility.vendor' | t }}
              
{{ card_product.vendor }}

            {%- endif -%}
 
            {{ block.settings.description | escape }}
 
            {%- if show_rating and card_product.metafields.reviews.rating.value != blank -%}
              {% liquid
                assign rating_decimal = 0
                assign decimal = card_product.metafields.reviews.rating.value.rating | modulo: 1
                if decimal >= 0.3 and decimal <= 0.7
                  assign rating_decimal = 0.5
                elsif decimal > 0.7
                  assign rating_decimal = 1
                endif
              %}
              

                
              

              

                
                  {{- card_product.metafields.reviews.rating.value }} /
                  {{ card_product.metafields.reviews.rating.value.scale_max -}}
                
              

              

                ({{ card_product.metafields.reviews.rating_count }})
                
                  {{- card_product.metafields.reviews.rating_count }}
                  {{ "accessibility.total_reviews" | t -}}
                
              

            {%- endif -%}
 
            {% render 'price', product: card_product, price_class: '' %}
          

        

        {%- if show_quick_add -%}
          
            {%- assign product_form_id = 'quick-add-' | append: section_id | append: card_product.id -%}
            {%- if card_product.variants.size == 1 -%}
              
            {%- else -%}
              
              
            {%- endif -%}
          

        {%- endif -%}
        
          {%- if card_product.available == false -%}
            
              {{- 'products.product.sold_out' | t -}}
            
          {%- elsif card_product.compare_at_price > card_product.price and card_product.available -%}
            
              {{- 'products.product.on_sale' | t -}}
            
          {%- endif -%}
        

      

    

  

{%- else -%}
  
    

      

        

          

            ### 
              
                {{ 'onboarding.product_title' | t }}
              
            
          

        

      

      
        

          ### 
            
              {{ 'onboarding.product_title' | t }}
            
          
          
            {%- if show_vendor -%}
              {{ 'accessibility.vendor' | t }}
              
{{ 'products.product.vendor' | t }}

            {%- endif -%}
            {% render 'price' %}
          

        

      

    

  

{%- endif -%}
1 Like

Really appreciate your help mate.

I wanted the position top left so replaced the bottom left bits to top left & works perfect. Thanks so much for your help. Can not recommend you enough. Brilliant! :grin:

1 Like