Aller au contenu
Exemples de Scripts

Migrating a purchase quantity limit script

Not a discount at all, and full of the exact syntax a BOGO uses, so a careless reader turns a purchase limit into a giveaway. The reliable tell is that it deletes cart lines and never changes a price.

Autre API Shopify
Ce que faisait le Script

It split the excess units off a line and deleted them from the cart.

Essayez-le sur votre propre boutique

Collez-le dans Sauvetage des Scripts et regardez ce qu'il reconstruit

  1. Copiez le Ruby avec le bouton placé à côté de chaque Script de cette page.
  2. Dans votre interface Shopify, ouvrez Stackable, puis Outils, puis Sauvetage des Scripts.
  3. Collez-le, lisez ce que l'outil annonce qu'il va construire et comparez-le aux réglages de cette page.

Sauvetage des Scripts fait partie du forfait Pro. Rien n'est publié tant que vous n'avez pas indiqué la remise de votre ancien Script et que les deux chiffres ne correspondent pas au centime près.

Le Script

Autre API Shopify

Paire à risque D6. Ce fichier et son jumeau se ressemblent presque à l'identique et se comportent différemment, alors lisez les deux avant de décider lequel vous avez.

Le Ruby d'origine

# GENERATED BY THE SHOPIFY SCRIPT CREATOR APP

class QuantityLimit < Campaign
  def initialize(condition, customer_qualifier, cart_qualifier, line_item_selector, limit_by, limit)
    super(condition, customer_qualifier, cart_qualifier, line_item_selector)
    @limit_by = limit_by
    @limit = limit
  end

  def run(cart)
    return unless qualifies?(cart)
    to_delete = []
    counts = {}
    cart.line_items.each_with_index do |item, index|
      next unless @line_item_selector.nil? || @line_item_selector.match?(item)
      key = @limit_by == :product ? item.variant.product.id : item.variant.id
      counts[key] = 0 unless counts[key]
      max_amount = @limit - counts[key]
      if max_amount <= 0
        to_delete << index
      elsif item.quantity > max_amount
        item.split(take: max_amount)
        counts[key] += max_amount
      else
        counts[key] += item.quantity
      end
    end
    to_delete.reverse.each { |index| cart.line_items.delete_at(index) }
  end
end

CAMPAIGNS = [
  QuantityLimit.new(:all, nil, nil, ProductTagSelector.new(:does, :match, ["limited"]), :variant, 2),
].freeze

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

Output.cart = Input.cart
Ce qu'il advient de celui-ci

This needs a different kind of Shopify app

Your Script blocked or limited checkout, such as a purchase limit or an age check. Shopify builds that with the Cart and Checkout Validation API, which Stackable does not ship.

Cette partie d'un Script n'est pas une remise. Shopify la construit avec un autre type de fonction, nommé ci-dessus, que Stackable ne propose pas.

Lire la documentation de Shopify

Clé du motif : otherApi.cartCheckoutValidation

Il n'y a pas de panier à tester ici, puisque rien n'est construit. Coller ceci produit le message ci-dessus et aucune campagne.

Deux fichiers qui se ressemblent

Chaque paire ci-dessous est une même forme de Script écrite de deux façons. Une ou deux lignes les séparent et elles ne font pas la même chose, alors lisez les deux avant de décider laquelle vous avez.

Paire piégeuse D6

Quantity limit purchase cap (D6)

Autre API Shopify

Non reconstruit. This needs a different kind of Shopify app

Les lignes qui changent
# GENERATED BY THE SHOPIFY SCRIPT CREATOR APP
class QuantityLimit < Campaign
  def initialize(condition, customer_qualifier, cart_qualifier, line_item_selector, limit_by, limit)
    super(condition, customer_qualifier, cart_qualifier, line_item_selector)
    @limit_by = limit_by
    @limit = limit

Et 26 autres lignes différentes, sur sa propre page.

Lire Purchase quantity limit

Quantity limit first n discounted (D6)

Reconstruit

Reconstruit en offre bxgy.

Remise sur son propre panier : $23.70

Les lignes qui changent
DISCOUNT_PERCENTAGE = 30
MAX_UNITS = 2
num_to_discount = MAX_UNITS
Input.cart.line_items.each_with_index do |line_item, position|
  break if num_to_discount <= 0
  next unless line_item.variant.product.tags.include?("limited")

Et 9 autres lignes différentes, sur sa propre page.

Lire Limit the discounted units

Questions fréquentes

Will Stackable rebuild this script?
No, and the reason is stated rather than hidden: Your Script blocked or limited checkout, such as a purchase limit or an age check. Shopify builds that with the Cart and Checkout Validation API, which Stackable does not ship.

Formes de Script apparentées

Limit the discounted units

The discount applied to the first few units only, with the rest at full price.

Remove products by country

Products that could not ship to the shopper’s country, quietly deleted.

Hide a payment method

A payment option taken off checkout under a condition.

Collez votre Script et voyez sa reconstruction

La reconstruction est comparée au montant que facturait votre ancien Script avant que vous puissiez la publier.

Nous utilisons des cookies essentiels pour faire fonctionner ce site et, uniquement avec votre autorisation, des cookies d'analyse pour comprendre le trafic. Consultez notre Politique de cookies.