Bloques de Liquid personalizados para recibos impresos

Puedes usar un bloque de Liquid personalizado para agregar tu propio contenido al encabezado o pie de página de un recibo impreso, como la información del pedido, del cliente, las propiedades del producto, los metacampos y los códigos de barras.

Los bloques de Liquid personalizados se muestran en los recibos impresos de pedidos online y de Point of Sale completados. No se muestran para los pedidos que usan el pago offline.

Puedes agregar un bloque de Liquid personalizado desde el editor visual de recibos en el panel de control de Shopify. Los valores a los que haces referencia se extraen de los datos del recibo cuando este se imprime. Por ejemplo, el siguiente código de Liquid agrega la nota del pedido al recibo cuando hay una nota:

{% if order.note %}
  <p>Order note: {{ order.note }}</p>
{% endif %}

Reglas de sintaxis de Liquid

Revisa las siguientes reglas de sintaxis antes de crear un bloque de Liquid personalizado:

  • Los nombres de las variables usan letras minúsculas y guiones bajos, un formato conocido como snake_case. Por ejemplo, usa order.total_price, order.customer.display_name y order.line_items.
  • Los valores monetarios son números simples. Dales formato con el filtro money, como {{ order.total_price | money }}.
  • Protege los valores opcionales con una declaración if para no imprimir una línea vacía, como {% if order.customer.email %}{{ order.customer.email }}{% endif %}.
  • Itera sobre las listas con una declaración for, como {% for item in order.line_items %} ... {% endfor %}.
  • Algunas etiquetas de Liquid no son compatibles. No puedes usar assign, capture, include, render, raw, increment ni decrement. Si el bloque usa una etiqueta no compatible, el recibo no se guardará y verás un error.
  • Un bloque de Liquid personalizado puede contener hasta 50 KB de código.

HTML y CSS

Puedes usar HTML básico en un bloque de Liquid personalizado para estructurar el contenido, como <p>, <br>, <strong>, <em>, encabezados, listas y enlaces. El contenido usa las fuentes y los tamaños existentes del recibo.

No puedes usar CSS para cambiar el aspecto de un recibo. Los bloques <style> y los atributos style no son compatibles para que un bloque de Liquid personalizado no pueda rediseñar ni ocultar contenido en otras partes del recibo. Las etiquetas <script>, los controladores de eventos como onclick y los enlaces de javascript: tampoco son compatibles.

Si el bloque contiene HTML no compatible, el recibo no se guardará y verás un error. Elimina el HTML no compatible y vuelve a guardar.

Variables y objetos

Un bloque de Liquid personalizado puede hacer referencia a los siguientes objetos y variables. Algunos valores no se encuentran en el recibo predeterminado, por lo que un bloque de Liquid personalizado es una forma de agregarlos.

Variables de nivel superior

Las siguientes variables de nivel superior están disponibles en un bloque de Liquid personalizado.

Descripción de las variables de nivel superior disponibles para un bloque de Liquid personalizado
VariableDescripción
order
El pedido que se está imprimiendo.
shop
La tienda.
location
El establecimiento minorista.
settings
La configuración de visualización del recibo, que corresponde a las opciones de activación configuradas en el editor.
purchased_gift_cards
Las tarjetas de regalo compradas en este pedido.
staff_member_description
El empleado asignado, cuando se activa la visualización de los empleados.
locale
La región del recibo, como en.
is_pickup
Si el pedido es de retiro.
pickup_location
El lugar de retiro, cuando corresponda.

Objeto de pedido

Descripción del objeto del pedido
PropiedadDescripción
name
El nombre del pedido, como #1001.
created_at
La marca de fecha y hora del pedido. Úsala con el filtro date.
note
La nota del pedido.
subtotal_price
El subtotal. Dale formato con el filtro money.
total_price
El total. Dale formato con el filtro money.
shipping_price
El cargo de envío. Dale formato con el filtro money.
total_tip_received
El total de propina. Dale formato con el filtro money.
balance_due
El monto que aún se debe. Dale formato con el filtro money.
change_due
El cambio entregado. Dale formato con el filtro money.
taxes_included
Si los precios incluyen el impuesto.
receipt_number
El número del recibo.
barcode_content
El contenido para codificar en un código de barras.
qr_code_content
El contenido para codificar en un código QR. Úsalo con el filtro qrcode.
line_items
Los artículos comprados. Las propiedades de cada artículo aparecen en el objeto de la línea de artículo del pedido.
transactions
Los pagos. Las propiedades de cada pago aparecen en el objeto de la transacción.
discounts
Los descuentos a nivel del pedido. Las propiedades de cada descuento aparecen en el objeto de descuento.
tax_lines
Las líneas de impuestos. Las propiedades de cada línea de impuestos aparecen en el objeto de la línea de impuestos.
refunds
Los reembolsos del pedido.
shipping_address
La dirección de envío. Las propiedades de la dirección se enumeran en el objeto de dirección.
customer
La información del cliente, que figura en el objeto de cliente.
metafields
Los metacampos del pedido.

Objeto de cliente

El objeto order.customer contiene la información del cliente.

Descripción del objeto de cliente
PropiedadDescripción
display_name
El nombre visible del cliente.
first_name
El nombre del cliente.
last_name
El apellido del cliente.
email
La dirección de correo electrónico del cliente.
phone
El número de teléfono del cliente.
default_address
La dirección predeterminada del cliente.
metafields
Los metacampos del cliente.

Objeto de línea de artículo del pedido

Cada artículo en order.line_items contiene las siguientes propiedades.

Descripción del objeto de línea de artículo del pedido
PropiedadDescripción
name
El nombre del producto o de la línea.
variant_title
La variante, como Grande / Azul.
sku
El SKU.
vendor
El proveedor.
quantity
La cantidad.
price
El precio unitario. Aplica el formato con el filtro money.
total_price
El total de la línea. Aplica el formato con el filtro money.
discounted_total_price
El total de la línea después de los descuentos. Aplica el formato con el filtro money.
discounted_unit_price
El precio unitario después de los descuentos. Aplica el formato con el filtro money.
discounts
Los descuentos aplicados a la línea.
selling_plan_name
El nombre de la suscripción o del plan de venta, si corresponde.
staff_member_description
El empleado asignado a la línea.
custom_attributes
Las propiedades de la línea de artículo, a las que se accede mediante clave.
product_metafields
Los metacampos del producto, a los que se accede mediante clave.
variant_metafields
Los metacampos de la variante, a los que se accede mediante clave.

Objeto de transacción

Cada pago en order.transactions contiene las siguientes propiedades. El crédito en tienda que se gastó en el pedido se incluye como un pago con el nombre de Crédito en tienda. El saldo del crédito en tienda restante del cliente no está disponible como variable.

Descripción del objeto de transacción
PropiedadDescripción
name
El nombre del pago, como Visa, efectivo o crédito en tienda.
payment_type
El código del tipo de pago.
amount
El monto. Aplica el formato con el filtro money.
kind
El tipo de transacción.
status
El estado de la transacción.
credit_card_number
El número de tarjeta oculto, si corresponde.
created_at
La marca de fecha y hora de la transacción.
additional_details
Líneas de información de pago adicionales.

Objeto de tienda

El objeto shop contiene la información de la tienda.

Descripción del objeto de tienda
PropiedadDescripción
name
El nombre de la tienda.
domain
El dominio de la tienda.
currency
La moneda de la tienda.
id
La identificación de la tienda.

Objeto de sucursal

El objeto location contiene la información de la sucursal minorista.

Descripción del objeto de sucursal
PropiedadDescripción
name
El nombre de la sucursal.
address1
La primera línea de la dirección.
address2
La segunda línea de la dirección.
city
La ciudad.
province
La provincia o el estado.
province_code
El código de la provincia o del estado.
zip
El código postal.
country
El país.
phone
El número de teléfono.
metafields
Los metacampos de la sucursal.

Objeto de dirección

Una dirección, como order.shipping_address o order.customer.default_address, contiene las siguientes propiedades.

Descripción del objeto de dirección
PropiedadDescripción
company
El nombre de la empresa.
name
El nombre del destinatario.
address1
La primera línea de la dirección.
address2
La segunda línea de la dirección.
city
La ciudad.
province
La provincia o el estado.
province_code
El código de la provincia o del estado.
zip
El código postal.
country
El país.
country_code
El código del país.
phone
El número de teléfono.

Objeto de descuento

Cada descuento en order.discounts o item.discounts contiene las siguientes propiedades.

Descripción del objeto de descuento
PropiedadDescripción
description
La descripción del descuento.
amount
El monto del descuento. Aplica el formato con el filtro money.
percentage
El porcentaje de descuento.

Objeto de línea de impuestos

Cada línea de impuestos en order.tax_lines contiene las siguientes propiedades.

Descripción del objeto de línea de impuestos
PropiedadDescripción
title
El título del impuesto.
rate
La tasa de impuestos en formato decimal.
rate_percentage
La tasa de impuestos como porcentaje.
price
El monto del impuesto. Aplica el formato con el filtro money.
taxable_amount
El monto sujeto a impuestos. Aplica el formato con el filtro money.

Objeto de tarjeta de regalo

Cada tarjeta de regalo en purchased_gift_cards contiene las siguientes propiedades.

Descripción del objeto de tarjeta de regalo
PropiedadDescripción
code
El código de la tarjeta de regalo.
masked_code
El código oculto de la tarjeta de regalo.
balance
El saldo de la tarjeta de regalo. Aplica formato con el filtro money.
created_at
La marca de fecha y hora de la tarjeta de regalo.
qr_code_content
El contenido para codificar en un código QR.

Metacampos y propiedades

Los metacampos y las propiedades de línea de artículo tienen dos formatos.

Los metacampos y las propiedades de línea de artículo se basan en claves. Accede a un valor directamente mediante su clave:

{{ item.product_metafields.care_instructions }}
{{ item.custom_attributes.engraving }}

Los metacampos de pedidos y clientes son listas. Itera sobre ellos:

{% for m in order.metafields %}
  {{ m.namespace }}.{{ m.key }}: {{ m.value }}
{% endfor %}

Las claves se normalizan a snake_case. A una clave como Care Instructions o careInstructions se accede como care_instructions. Siempre haz referencia a los valores de clave en minúscula y con guiones bajos.

La disponibilidad de metacampos de pedido y cliente depende de que esos metacampos existan en el registro.

Filtros de Liquid

Puedes usar filtros para dar formato a la información en tu bloque personalizado de Liquid. Para aplicar un filtro, agrega un carácter de barra vertical, |, y luego el filtro dentro del resultado de Liquid; por ejemplo, {{ order.total_price | money }}.

Los filtros estándar de Liquid también funcionan. Para obtener más información sobre los filtros de Liquid, consulta la referencia de filtros.

Descripción de los filtros disponibles para un bloque personalizado de Liquid
FiltroEjemploDescripción
money
{{ order.total_price | money }}
Da formato a un monto en la moneda del recibo.
date
{{ order.created_at | date: '%B %e, %Y' }}
Da formato a una fecha u hora.
percent
{{ tax_line.rate | percent }}
Da formato a un decimal como porcentaje; por ejemplo, 0,2 como 20%.
t
{{ 'receipt.total' | t }}
Devuelve una etiqueta traducida.
barcode
{{ order.barcode_content | barcode }}
Muestra un código de barras.
qrcode
{{ order.qr_code_content | qrcode }}
Muestra un código QR.

Ejemplos de bloques personalizados de Liquid

Los siguientes ejemplos agregan contenido que no está en una plantilla de recibo impreso predeterminada.

Para agregar la nota de pedido (cuando haya una), usa el siguiente código de Liquid:

{% if order.note %}<p>Note: {{ order.note }}</p>{% endif %}

Para agregar el SKU junto a cada artículo, usa el siguiente código de Liquid:

{% for item in order.line_items %}
  <p>{{ item.name }} — {{ item.sku }} ×{{ item.quantity }}</p>
{% endfor %}

Para agregar una propiedad de línea de artículo, como un grabado, usa el siguiente código de Liquid:

{% for item in order.line_items %}
  {% if item.custom_attributes.engraving %}
    <p>{{ item.name }} — Engraving: {{ item.custom_attributes.engraving }}</p>
  {% endif %}
{% endfor %}

Para agregar un metacampo de producto, como las instrucciones de cuidado, usa el siguiente código de Liquid:

{% for item in order.line_items %}
  {% if item.product_metafields.care_instructions %}
    <p>{{ item.name }}: {{ item.product_metafields.care_instructions }}</p>
  {% endif %}
{% endfor %}

Para agregar un metacampo de cliente, usa el siguiente código de Liquid:

{% for m in order.customer.metafields %}
  {% if m.key == 'loyalty_tier' %}<p>Loyalty tier: {{ m.value }}</p>{% endif %}
{% endfor %}

Para agregar un código QR que enlace al pedido, usa el siguiente código de Liquid:

{{ order.qr_code_content | qrcode }}