Blocos personalizados do Liquid para comprovantes impressos

Use um bloco personalizado do Liquid para adicionar conteúdo próprio ao cabeçalho ou rodapé de um comprovante impresso, como informações do pedido, dados de clientes, propriedades do produto, metacampos e códigos de barras.

Os blocos personalizados do Liquid são renderizados em comprovantes impressos de pedidos concluídos online e no POS. Eles não são renderizados em pedidos que usam checkout offline.

É possível adicionar um bloco personalizado do Liquid no editor visual de comprovantes do admin da Shopify. Os valores de referência são extraídos dos dados do comprovante no momento da impressão. Por exemplo, o código a seguir em Liquid adiciona a observação do pedido ao comprovante, quando houver:

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

Regras de sintaxe do Liquid

Revise as seguintes regras de sintaxe antes de criar um bloco personalizado do Liquid:

  • Nomes de variáveis usam letras minúsculas e sublinhados, um formato conhecido como "snake_case". Por exemplo, use order.total_price, order.customer.display_name e order.line_items.
  • Valores em dinheiro são números simples. Formate-os com o filtro money, como {{ order.total_price | money }}.
  • Proteja valores opcionais com uma instrução if para não imprimir uma linha em branco, como {% if order.customer.email %}{{ order.customer.email }}{% endif %}.
  • Itere sobre listas com uma instrução for, como {% for item in order.line_items %} ... {% endfor %}.
  • Não há compatibilidade com algumas tags do Liquid. Não é possível usar assign, capture, include, render, raw, increment ou decrement. Se o bloco usar uma tag incompatível, o comprovante não será salvo e você verá um erro.
  • Um bloco personalizado do Liquid pode conter até 50 kB de código.

HTML e CSS

É possível usar HTML básico em um bloco personalizado do Liquid para estruturar o conteúdo, como <p>, <br>, <strong>, <em>, títulos, listas e links. O conteúdo usa as fontes e os tamanhos atuais do comprovante.

Não é possível usar CSS para alterar a aparência do comprovante. Blocos <style> e atributos style são incompatíveis. Assim, um bloco personalizado do Liquid não pode reestilizar ou ocultar o conteúdo em outros lugares do comprovante. Tags <script>, manipuladores de eventos como onclick e links javascript: também não são compatíveis.

Se o bloco contiver HTML incompatível, o comprovante não será salvo e você verá um erro. Remova o HTML incompatível e salve de novo.

Variáveis e objetos

Um bloco personalizado do Liquid pode referenciar os seguintes objetos e variáveis. Alguns valores não constam no comprovante padrão, portanto, uma das formas de adicioná-los é usando um bloco personalizado do Liquid.

Variáveis de nível superior

As seguintes variáveis de nível superior estão disponíveis em um bloco personalizado do Liquid.

Descrição das variáveis de nível superior disponíveis em um bloco personalizado do Liquid
VariávelDescrição
order
O pedido que está sendo impresso.
shop
A loja.
location
A loja física.
settings
As configurações de exibição do comprovante, ou seja, os botões de alternância configurados no editor.
purchased_gift_cards
Os cartões-presente comprados no pedido.
staff_member_description
O membro da equipe atribuído, caso a exibição da equipe esteja ativada.
locale
A localidade do comprovante, como pt.
is_pickup
Se for um pedido de retirada.
pickup_location
O local de retirada, quando aplicável.

Objeto de pedido

Descrição do objeto do pedido
PropriedadeDescrição
name
O nome do pedido, como #1001.
created_at
A marcação de data e hora do pedido. Use com o filtro date.
note
A observação do pedido.
subtotal_price
O subtotal. Formate com o filtro money.
total_price
O total. Formate com o filtro money.
shipping_price
O frete cobrado. Formate com o filtro money.
total_tip_received
O total de gorjetas. Formate com o filtro money.
balance_due
O valor restante. Formate com o filtro money.
change_due
O troco repassado. Formate com o filtro money.
taxes_included
Se os tributos estão incluídos nos preços.
receipt_number
O número do comprovante.
barcode_content
O conteúdo a codificar em um código de barras.
qr_code_content
O conteúdo a codificar em um código QR. Use com o filtro qrcode.
line_items
Os itens comprados. As propriedades de cada um estão no objeto de item de linha do pedido.
transactions
Os pagamentos. As propriedades de cada um estão no objeto de transação.
discounts
Os descontos no nível do pedido. As propriedades de cada um estão no objeto de desconto.
tax_lines
As linhas de tributos. As propriedades de cada uma estão no objeto de linha de tributos.
refunds
Os reembolsos no pedido.
shipping_address
O endereço de entrega. As propriedades do endereço estão listadas no objeto de endereço.
customer
As informações do cliente, listadas no objeto do cliente.
metafields
Os metacampos do pedido.

Objeto do cliente

O objeto order.customer contém as informações do cliente.

Descrição do objeto do cliente
PropriedadeDescrição
display_name
O nome de exibição do cliente.
first_name
O nome do cliente.
last_name
O sobrenome do cliente.
email
O endereço de e-mail do cliente.
phone
O número de telefone do cliente.
default_address
O endereço padrão do cliente.
metafields
Os metacampos do cliente.

Objeto de item de linha do pedido

Cada item em order.line_items contém as seguintes propriedades.

Descrição do objeto de item de linha do pedido
PropriedadeDescrição
name
O nome do produto ou da linha.
variant_title
A variante, como Grande/Azul.
sku
O SKU.
vendor
O fabricante.
quantity
A quantidade.
price
O preço unitário. Formate com o filtro money.
total_price
O total da linha. Formate com o filtro money.
discounted_total_price
O total da linha após os descontos. Formate com o filtro money.
discounted_unit_price
O preço unitário após os descontos. Formate com o filtro money.
discounts
Os descontos aplicados à linha.
selling_plan_name
O nome da assinatura ou do plano de venda, se houver.
staff_member_description
O membro da equipe atribuído à linha.
custom_attributes
As propriedades do item de linha, acessadas por chave.
product_metafields
Os metacampos do produto, acessados por chave.
variant_metafields
Os metacampos da variante, acessados por chave.

Objeto de transação

Cada pagamento em order.transactions contém as seguintes propriedades. O crédito na loja gasto no pedido é listado como um pagamento denominado "Crédito na loja". O saldo de crédito na loja restante do cliente não fica disponível como uma variável.

Descrição do objeto de transação
PropriedadeDescrição
name
O nome do pagamento, como Visa, dinheiro ou crédito na loja.
payment_type
O código do tipo de pagamento.
amount
O valor. Formate com o filtro money.
kind
O tipo de transação.
status
O status da transação.
credit_card_number
O número do cartão mascarado, quando aplicável.
created_at
A marcação de data e hora da transação.
additional_details
Linhas adicionais de informações de pagamento.

Objeto da loja

O objeto shop é o objeto que contém as informações da loja.

Descrição do objeto da loja
PropriedadeDescrição
name
O nome da loja.
domain
O domínio da loja.
currency
A moeda da loja.
id
O ID da loja.

Objeto de local

O objeto location é o objeto que contém as informações do local de varejo.

Descrição do objeto de local
PropriedadeDescrição
name
O nome do local.
address1
A primeira linha do endereço.
address2
A segunda linha do endereço.
city
A cidade.
province
A província ou o estado.
province_code
O código da província ou do estado.
zip
O CEP.
country
O país.
phone
O número de telefone.
metafields
Os metacampos do local.

Objeto de endereço

Um endereço, como order.shipping_address ou order.customer.default_address, contém as seguintes propriedades.

Descrição do objeto de endereço
PropriedadeDescrição
company
O nome da empresa.
name
O nome do destinatário.
address1
A primeira linha do endereço.
address2
A segunda linha do endereço.
city
A cidade.
province
A província ou o estado.
province_code
O código da província ou do estado.
zip
O CEP.
country
O país.
country_code
O código do país.
phone
O número de telefone.

Objeto de desconto

Cada desconto em order.discounts ou item.discounts contém as seguintes propriedades.

Descrição do objeto de desconto
PropriedadeDescrição
description
A descrição do desconto.
amount
O valor do desconto. Formate com o filtro money.
percentage
A porcentagem de desconto.

Objeto de linha de tributo

Cada linha de tributo em order.tax_lines contém as seguintes propriedades.

Descrição do objeto de linha de tributo
PropriedadeDescrição
title
O título do tributo.
rate
A alíquota como um decimal.
rate_percentage
A alíquota como uma porcentagem.
price
O valor do tributo. Formate com o filtro money.
taxable_amount
O valor sujeito a tributo. Formate com o filtro money.

Objeto de cartão-presente

Cada cartão-presente em purchased_gift_cards contém as seguintes propriedades.

Descrição do objeto de cartão-presente
PropriedadeDescrição
code
O código do cartão-presente.
masked_code
O código mascarado do cartão-presente.
balance
O saldo do cartão-presente. Formate com o filtro money.
created_at
A marcação de data e hora do cartão-presente.
qr_code_content
O conteúdo para codificar em um código QR.

Metacampos e propriedades

Os metacampos e as propriedades de itens de linha podem ter dois formatos.

Os metacampos e as propriedades de itens de linha são indexados por chave. Acesse um valor diretamente pela chave correspondente:

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

Os metacampos de pedido e cliente são listas. Faça a iteração por eles:

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

As chaves são normalizadas para snake_case. O acesso a uma chave como Care Instructions ou careInstructions é feito por care_instructions. Sempre referencie valores com chave em letras minúsculas com sublinhados.

A disponibilidade dos metacampos de pedido e cliente depende da existência deles no registro.

Filtros do Liquid

É possível usar filtros para formatar as informações no bloco personalizado do Liquid. Para aplicar um filtro, adicione um caractere de barra vertical, |, e depois o filtro dentro da saída do Liquid, como em {{ order.total_price | money }}.

Os filtros padrão do Liquid também funcionam. Para saber mais, consulte a Referência de filtros do Liquid.

Descrição dos filtros disponíveis para um bloco personalizado do Liquid
FiltroExemploDescrição
money
{{ order.total_price | money }}
Formata um valor na moeda do comprovante.
date
{{ order.created_at | date: '%B %e, %Y' }}
Formata uma data ou hora.
percent
{{ tax_line.rate | percent }}
Formata um decimal como porcentagem, como 0,2 para 20%.
t
{{ 'receipt.total' | t }}
Retorna uma etiqueta traduzida.
barcode
{{ order.barcode_content | barcode }}
Renderiza um código de barras.
qrcode
{{ order.qr_code_content | qrcode }}
Renderiza um código QR.

Exemplos de blocos personalizados do Liquid

Os exemplos a seguir adicionam conteúdo que não está no modelo padrão de comprovante impresso.

Para adicionar a observação do pedido, quando houver, use o seguinte Liquid:

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

Para adicionar o SKU ao lado de cada item, use o seguinte Liquid:

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

Para adicionar uma propriedade de item de linha, como uma gravação, use o seguinte Liquid:

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

Para adicionar um metacampo de produto, como instruções de lavagem, use o seguinte 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 adicionar um metacampo de cliente, use o seguinte Liquid:

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

Para adicionar um código QR com um link para o pedido, use o seguinte Liquid:

{{ order.qr_code_content | qrcode }}