skip to Main Content

I’m new to Shopify. please anyone can answer. just how to add a discount script in debut default theme without using any script editor app.
this is a script for spend X amount and get a Y% discount… I got this ruby script in Shopify.

  PRODUCT_DISCOUNT_TIERS = [
    {
   product_selector_match_type: :include,
   product_selector_type: :tag,
     product_selectors: ["your_tag"],
     tiers: [
       {
      quantity: 2,
    discount_type: :percent,
    discount_amount: 10,
    discount_message: '10% off for 2+',
  },
  {
    quantity: 5,
    discount_type: :percent,
    discount_amount: 15,
    discount_message: '15% off for 5+',
  },
],
  },
 ]
   class ProductSelector
    def initialize(match_type, selector_type, selectors)
    @match_type = match_type
    @comparator = match_type == :include ? 'any?' : 'none?'
    @selector_type = selector_type
    @selectors = selectors
   end

   def match?(line_item)
    if self.respond_to?(@selector_type)
      self.send(@selector_type, line_item)
    else
  raise RuntimeError.new('Invalid product selector type')
  end
end

  def tag(line_item)
   product_tags = line_item.variant.product.tags.map { |tag| tag.downcase.strip }
   @selectors = @selectors.map { |selector| selector.downcase.strip }
   (@selectors & product_tags).send(@comparator)
  end

   def type(line_item)
   @selectors = @selectors.map { |selector| selector.downcase.strip }
   (@match_type == :include) == @selectors.include? 
   (line_item.variant.product.product_type.downcase.strip)
  end

  def vendor(line_item)
@selectors = @selectors.map { |selector| selector.downcase.strip }
(@match_type == :include) == @selectors.include? 
 (line_item.variant.product.vendor.downcase.strip)
 end

 def product_id(line_item)
(@match_type == :include) == @selectors.include?(line_item.variant.product.id)
 end

 def variant_id(line_item)
(@match_type == :include) == @selectors.include?(line_item.variant.id)
 end

 def all(line_item)
  true
 end
  end
  class TieredPricingCampaign
    def initialize(campaigns)
    @campaigns = campaigns
   end

  def run(cart)
   @campaigns.each do |campaign|
  product_selector = ProductSelector.new(
    campaign[:product_selector_match_type],
    campaign[:product_selector_type],
    campaign[:product_selectors],
  )

  applicable_items = cart.line_items.select { |line_item| product_selector.match?(line_item) 
 }

  next if applicable_items.nil?

  total_applicable_quantity = applicable_items.map(&:quantity).reduce(0, :+)
  tiers = campaign[:tiers].sort_by { |tier| tier[:quantity] }.reverse
  applicable_tier = tiers.find { |tier| tier[:quantity] <= total_applicable_quantity }

  next if applicable_tier.nil?

  discount_applicator = DiscountApplicator.new(
    applicable_tier[:discount_type],
    applicable_tier[:discount_amount],
    applicable_tier[:discount_message]
  )

  applicable_items.each do |line_item|
    discount_applicator.apply(line_item)
  end
end
end
end

  CAMPAIGNS = [
  TieredPricingCampaign.new(PRODUCT_DISCOUNT_TIERS),
  ]

CAMPAIGNS.each do |campaign|
campaign.run(Input.cart)
end

Output.cart = Input.cart

Is it possible to add the script without using script editor and Shopify plus app. please anyone helps me.

2

Answers


  1. No, you must use a Shopify Script App.

    You can’t write ruby scripts in the theme code, only liquid and html/css/js is allowed there.

    If you like to have automatic discounts look into Automatic Discounts (you can have one active) https://YOUR_STORE.myshopify.com/admin/discounts/automatic. But you won’t be able to achieve what you are describing with the current set of discounts conditions.

    Login or Signup to reply.
  2. Correct this is not possible without the script editor app. The code runs in Shopify checkout so you cannot insert it unfortunately.

    Login or Signup to reply.
Please signup or login to give your own answer.
Back To Top
Search