Saltar al contenido
Ejemplos de Scripts

Migrating a script that took an amount off each item

Written four different ways in the wild, and two of them differ only in whether the number in the file already meant cents. Reading a generator’s "5" as five cents is a hundredfold error, so all four spellings are shown side by side.

Reconstruido
Qué hacía el Script

It subtracted a fixed sum from every matching unit in the cart.

Los comerciantes escribieron esto de 4 formas distintas, y no todas significan lo mismo. Cada variante aparece abajo con su propio carrito y sus propias cifras.

Pruébalo en tu propia tienda

Pégalo en Rescate de scripts y mira qué reconstruye

  1. Copia el Ruby con el botón que hay junto a cualquier Script de esta página.
  2. En tu panel de Shopify, abre Stackable, luego Herramientas y luego Rescate de scripts.
  3. Pégalo ahí, lee lo que la herramienta dice que va a crear y compáralo con los ajustes de esta página.

Rescate de scripts está en el plan Pro. No se publica nada hasta que le digas cuánto descontaba tu Script antiguo y las dos cifras coincidan al céntimo.

Amount off per unit (D1)

Reconstruido

Par peligroso D1. Este archivo y su pareja parecen casi idénticos y se comportan de forma distinta, así que lee los dos antes de decidir cuál tienes.

El Ruby original

DISCOUNT = Money.new(cents: 999)

Input.cart.line_items.each do |line_item|
  next unless line_item.variant.product.product_type == "Clearance"
  new_price = line_item.line_price - (DISCOUNT * line_item.quantity)
  line_item.change_line_price(new_price, message: "$9.99 off each")
end

Output.cart = Input.cart
En qué se convierte

Reconocido como Amount off at a quantity y reconstruido como una oferta de tipo volume. Estas son las claves de configuración reales con las que se guarda la oferta, así que puedes comparar tu propia reconstrucción campo por campo.

Cada ajuste, detallado
AjusteValorClave de configuración
Offer typevolumetype
Countingper_productcounting
Recurrenceoncerecurrence
Tier 1min qty 1 -> $9.99 off eachtiers[0]
Target scopeproduct_typestarget.scope
Target includesClearancetarget.includeIds
MethodautomaticdiscountMethod
Allocationstandardstacking.allocation
Combines with other discountsnostacking
Se te pedirá que confirmes
  • Your Script limited this to a tag, vendor, or product type. We carried that filter over, so confirm it selects the products you expect.
El carrito que lo demuestra

Creado en nuestra tienda de demostración pública, Meridian Goods, para que cada precio de aquí se pueda reproducir en lugar de darlo por bueno. El descuento de abajo es lo que calcula para este carrito exacto el mismo motor que se ejecuta en el pago.

  • No Meridian Goods product carries the type Clearance. Set it on Aria Wireless Earbuds in Shopify before you build the cart, and on nothing else.
El carrito que activa esta oferta, y lo que cuesta
ArtículoCant.Precio unit.
Aria Wireless Earbuds1$79.00
Subtotal$79.00
Descuento-$9.99
Total$69.01

Sin sesión iniciada, o con sesión de un cliente sin etiquetas.

La cifra con la que la herramienta te compara

Antes de publicar, la herramienta pregunta qué hacía tu Script antiguo con un carrito que ya tienes. Ponlo en 1 de Aria Wireless Earbuds a $79.00 y la respuesta queda fijada.

El descuento es $9.99. El total que pagó el comprador es $69.01.

La comparación es exacta, hasta la unidad más pequeña de tu moneda. Un céntimo de diferencia y la publicación sigue bloqueada, que es todo el sentido de este paso.

El carrito que no debe producir nada
  • swap the cart for a single Braided USB-C Cable
El carrito que no debe activar esta oferta
ArtículoCant.Precio unit.
Braided USB-C Cable1$14.00
Subtotal$14.00
Total$14.00

Sin sesión iniciada, o con sesión de un cliente sin etiquetas.

Amount off per unit (D7)

Reconstruido

Par peligroso D7. Este archivo y su pareja parecen casi idénticos y se comportan de forma distinta, así que lee los dos antes de decidir cuál tienes.

El Ruby original

# GENERATED BY THE SHOPIFY SCRIPT CREATOR APP

class FixedItemDiscount
  def initialize(amount, message)
    @amount = Money.new(cents: 100) * amount
    @message = message
  end

  def apply(line_item)
    per_item_discount = @amount
    discount_to_apply = [(per_item_discount * line_item.quantity), line_item.line_price].min
    line_item.change_line_price([line_item.line_price - discount_to_apply, Money.zero].max, message: @message)
  end
end

CAMPAIGNS = [
  ConditionalDiscount.new(:all, nil, nil, nil, FixedItemDiscount.new(5, "$5 off each"), 0),
].freeze

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

Output.cart = Input.cart
En qué se convierte

Reconocido como Amount off at a quantity y reconstruido como una oferta de tipo volume. Estas son las claves de configuración reales con las que se guarda la oferta, así que puedes comparar tu propia reconstrucción campo por campo.

Cada ajuste, detallado
AjusteValorClave de configuración
Offer typevolumetype
Countingper_productcounting
Recurrenceoncerecurrence
Tier 1min qty 1 -> $5.00 off eachtiers[0]
Target scopealltarget.scope
MethodautomaticdiscountMethod
Allocationstandardstacking.allocation
Combines with other discountsnostacking
Se te pedirá que confirmes
  • Confirm which products this applies to. We could not read product targeting from the script.
El carrito que lo demuestra

Creado en nuestra tienda de demostración pública, Meridian Goods, para que cada precio de aquí se pueda reproducir en lugar de darlo por bueno. El descuento de abajo es lo que calcula para este carrito exacto el mismo motor que se ejecuta en el pago.

El carrito que activa esta oferta, y lo que cuesta
ArtículoCant.Precio unit.
Braided USB-C Cable1$14.00
Subtotal$14.00
Descuento-$5.00
Total$9.00

Sin sesión iniciada, o con sesión de un cliente sin etiquetas.

La cifra con la que la herramienta te compara

Antes de publicar, la herramienta pregunta qué hacía tu Script antiguo con un carrito que ya tienes. Ponlo en 1 de Braided USB-C Cable a $14.00 y la respuesta queda fijada.

El descuento es $5.00. El total que pagó el comprador es $9.00.

La comparación es exacta, hasta la unidad más pequeña de tu moneda. Un céntimo de diferencia y la publicación sigue bloqueada, que es todo el sentido de este paso.

El carrito que no debe producir nada

This rule carries no condition at all, so it fires on any cart holding anything and there is no quiet cart to build. The negative check is an empty cart, which the app runs for you. That is correct behaviour, not a failure.

Amount off per unit dollars (D11)

Reconstruido

Par peligroso D11. Este archivo y su pareja parecen casi idénticos y se comportan de forma distinta, así que lee los dos antes de decidir cuál tienes.

El Ruby original

# GENERATED BY THE SHOPIFY SCRIPT CREATOR APP

class FixedItemDiscount
  def initialize(amount, message)
    @amount = Money.new(cents: 100) * amount
    @message = message
  end

  def apply(line_item)
    discount_to_apply = [(@amount * line_item.quantity), line_item.line_price].min
    line_item.change_line_price([line_item.line_price - discount_to_apply, Money.zero].max, message: @message)
  end
end

CAMPAIGNS = [
  ConditionalDiscount.new(:all, nil, nil, nil, FixedItemDiscount.new(5, "$5 off each"), 0),
].freeze

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

Output.cart = Input.cart
En qué se convierte

Reconocido como Amount off at a quantity y reconstruido como una oferta de tipo volume. Estas son las claves de configuración reales con las que se guarda la oferta, así que puedes comparar tu propia reconstrucción campo por campo.

Cada ajuste, detallado
AjusteValorClave de configuración
Offer typevolumetype
Countingper_productcounting
Recurrenceoncerecurrence
Tier 1min qty 1 -> $5.00 off eachtiers[0]
Target scopealltarget.scope
MethodautomaticdiscountMethod
Allocationstandardstacking.allocation
Combines with other discountsnostacking
Se te pedirá que confirmes
  • Confirm which products this applies to. We could not read product targeting from the script.
El carrito que lo demuestra

Creado en nuestra tienda de demostración pública, Meridian Goods, para que cada precio de aquí se pueda reproducir en lugar de darlo por bueno. El descuento de abajo es lo que calcula para este carrito exacto el mismo motor que se ejecuta en el pago.

El carrito que activa esta oferta, y lo que cuesta
ArtículoCant.Precio unit.
Braided USB-C Cable1$14.00
Subtotal$14.00
Descuento-$5.00
Total$9.00

Sin sesión iniciada, o con sesión de un cliente sin etiquetas.

La cifra con la que la herramienta te compara

Antes de publicar, la herramienta pregunta qué hacía tu Script antiguo con un carrito que ya tienes. Ponlo en 1 de Braided USB-C Cable a $14.00 y la respuesta queda fijada.

El descuento es $5.00. El total que pagó el comprador es $9.00.

La comparación es exacta, hasta la unidad más pequeña de tu moneda. Un céntimo de diferencia y la publicación sigue bloqueada, que es todo el sentido de este paso.

El carrito que no debe producir nada

This rule carries no condition at all, so it fires on any cart holding anything and there is no quiet cart to build. The negative check is an empty cart, which the app runs for you. That is correct behaviour, not a failure.

Amount off per unit cents (D11)

Reconstruido

Par peligroso D11. Este archivo y su pareja parecen casi idénticos y se comportan de forma distinta, así que lee los dos antes de decidir cuál tienes.

El Ruby original

DISCOUNT = Money.new(cents: 500)

Input.cart.line_items.each do |line_item|
  discount_to_apply = [(DISCOUNT * line_item.quantity), line_item.line_price].min
  line_item.change_line_price([line_item.line_price - discount_to_apply, Money.zero].max, message: "$5 off each")
end

Output.cart = Input.cart
En qué se convierte

Reconocido como Amount off at a quantity y reconstruido como una oferta de tipo volume. Estas son las claves de configuración reales con las que se guarda la oferta, así que puedes comparar tu propia reconstrucción campo por campo.

Cada ajuste, detallado
AjusteValorClave de configuración
Offer typevolumetype
Countingper_productcounting
Recurrenceoncerecurrence
Tier 1min qty 1 -> $5.00 off eachtiers[0]
Target scopealltarget.scope
MethodautomaticdiscountMethod
Allocationstandardstacking.allocation
Combines with other discountsnostacking
Se te pedirá que confirmes
  • Confirm which products this applies to. We could not read product targeting from the script.
El carrito que lo demuestra

Creado en nuestra tienda de demostración pública, Meridian Goods, para que cada precio de aquí se pueda reproducir en lugar de darlo por bueno. El descuento de abajo es lo que calcula para este carrito exacto el mismo motor que se ejecuta en el pago.

El carrito que activa esta oferta, y lo que cuesta
ArtículoCant.Precio unit.
Braided USB-C Cable1$14.00
Subtotal$14.00
Descuento-$5.00
Total$9.00

Sin sesión iniciada, o con sesión de un cliente sin etiquetas.

La cifra con la que la herramienta te compara

Antes de publicar, la herramienta pregunta qué hacía tu Script antiguo con un carrito que ya tienes. Ponlo en 1 de Braided USB-C Cable a $14.00 y la respuesta queda fijada.

El descuento es $5.00. El total que pagó el comprador es $9.00.

La comparación es exacta, hasta la unidad más pequeña de tu moneda. Un céntimo de diferencia y la publicación sigue bloqueada, que es todo el sentido de este paso.

El carrito que no debe producir nada

This rule carries no condition at all, so it fires on any cart holding anything and there is no quiet cart to build. The negative check is an empty cart, which the app runs for you. That is correct behaviour, not a failure.

Dos archivos que parecen iguales

Cada pareja de abajo es una misma forma de Script escrita de dos maneras. Se diferencian en una o dos líneas y hacen cosas distintas, así que lee las dos antes de decidir cuál tienes.

Pareja peligrosa D1

Amount off per unit (D1)

Reconstruido

Se reconstruye como una oferta volume.

Descuento en su propio carrito: $9.99

Líneas que cambian
DISCOUNT = Money.new(cents: 999)
  new_price = line_item.line_price - (DISCOUNT * line_item.quantity)
  line_item.change_line_price(new_price, message: "$9.99 off each")
Leer Amount off each item

Fixed price per unit (D1)

Reconstruido

Se reconstruye como una oferta volume.

Descuento en su propio carrito: $69.01

Líneas que cambian
FIXED_PRICE = Money.new(cents: 999)
  line_item.change_line_price(FIXED_PRICE * line_item.quantity, message: "Clearance $9.99 each")
Leer Fixed price per item

Pareja peligrosa D7

Amount off per unit (D7)

Reconstruido

Se reconstruye como una oferta volume.

Descuento en su propio carrito: $5.00

Líneas que cambian
class FixedItemDiscount
  def initialize(amount, message)
    per_item_discount = @amount
    discount_to_apply = [(per_item_discount * line_item.quantity), line_item.line_price].min
    line_item.change_line_price([line_item.line_price - discount_to_apply, Money.zero].max, message: @message)
  ConditionalDiscount.new(:all, nil, nil, nil, FixedItemDiscount.new(5, "$5 off each"), 0),
Leer Amount off each item

Fixed total discount cart (D7)

Reconstruido

Se reconstruye como una oferta spend_goal.

Descuento en su propio carrito: $5.00

Líneas que cambian
class FixedTotalDiscount
  def initialize(amount, message, behaviour = :split)
    @discount_applied = Money.zero
    @behaviour = behaviour
    return unless @discount_applied < @amount
    discount_to_apply = [(@amount - @discount_applied), line_item.line_price].min

Y 3 líneas distintas más, en su propia página.

Leer Amount off the order

Pareja peligrosa D11

Amount off per unit dollars (D11)

Reconstruido

Se reconstruye como una oferta volume.

Descuento en su propio carrito: $5.00

Líneas que cambian
# GENERATED BY THE SHOPIFY SCRIPT CREATOR APP
class FixedItemDiscount
  def initialize(amount, message)
    @amount = Money.new(cents: 100) * amount
    @message = message
  end

Y 10 líneas distintas más, en su propia página.

Leer Amount off each item

Amount off per unit cents (D11)

Reconstruido

Se reconstruye como una oferta volume.

Descuento en su propio carrito: $5.00

Líneas que cambian
DISCOUNT = Money.new(cents: 500)
Input.cart.line_items.each do |line_item|
  discount_to_apply = [(DISCOUNT * line_item.quantity), line_item.line_price].min
  line_item.change_line_price([line_item.line_price - discount_to_apply, Money.zero].max, message: "$5 off each")
Leer Amount off each item

Preguntas frecuentes

Will Stackable rebuild this script?
Yes. Every spelling on this page is rebuilt today as a volume offer, and the cart above is the one that proves it.
What cart proves it works?
1 x Aria Wireless Earbuds at $79.00. The engine takes $9.99 off, and checkout charges $69.01.
What will I have to check before publishing?
Your Script limited this to a tag, vendor, or product type. We carried that filter over, so confirm it selects the products you expect. Confirm which products this applies to. We could not read product targeting from the script.

Formas de Script relacionadas

Fixed price per item

Everything in the clearance line repriced to one round number per unit.

Amount off the order

One lump sum off the whole cart, spread across the lines.

Sitewide percentage off

One percentage off the whole catalogue, with no condition attached.

Pega tu Script y mira cómo se reconstruye

La reconstrucción se compara con el dinero que cobraba tu Script antiguo antes de que puedas publicarla.

Usamos cookies esenciales para el funcionamiento de este sitio y, solo con tu permiso, cookies analíticas para entender el tráfico. Lee nuestra Política de cookies.