# Customise Your Receipt

If you want to change how your receipt looks, you have three options. Pick the easiest one that does what you need — most stores never have to look past the first.

## Three ways to customise[​](#three-ways-to-customise "Direct link to Three ways to customise")

#### 1. Pick a different template

Use one of the ready-made templates in the gallery. **No code at all.** Best for: a different layout, hiding prices, an A4 invoice, a kitchen ticket.

#### 2. Ask AI to tweak it

Paste the template into ChatGPT or Claude and describe what you want. **No coding skills needed** — you describe it in plain English. Best for: small tweaks like wording, colours, or moving things around.

#### 3. Edit it by hand

The in-app editor lets you change the template directly. Best for: precise control, or if you already know HTML.

All three start in the same place: **WP Admin → POS → Templates**. The page has two parts — **Your Templates** at the top (the ones you're using right now) and the **Template Gallery** below it (the starter library).

## Option 1 — Pick a different template[​](#option-1--pick-a-different-template "Direct link to Option 1 — Pick a different template")

This is the easiest path and covers most needs.

1

#### Open the template gallery

In WP Admin go to **POS → Templates**. Scroll past *Your Templates* to the **Template Gallery** section — that's the starter library.

2

#### Browse and preview

Filter by **category** (Receipt, Invoice, Gift Receipt, Kitchen Ticket, Quote / Purchase Order), **format** (HTML for browser print, ESC/POS for thermal printers), or **direction** (Left-to-right or Right-to-left). Click any card's thumbnail — or the **Preview** link in its footer — to open a live preview with your store's real data.

3

#### Use it

Click **Use Template** on the card. WCPOS makes you an editable copy and adds it to **Your Templates** at the top of the page. Flip the **Active** toggle on the row to start using it on receipts; drag the row's grip handle to reorder. You can have several active at once — the cashier picks at the till.

Use Template never replaces anything

Clicking **Use Template** always creates a fresh copy. The original gallery template is left untouched, so you can come back and pick a different starting point any time. If multiple receipt templates are active, the receipt screen shows a dropdown so the cashier can switch between them on the fly.

### The bundled templates[​](#the-bundled-templates "Direct link to The bundled templates")

| Template                                   | Format  | What it's for                                                                |
| ------------------------------------------ | ------- | ---------------------------------------------------------------------------- |
| **Standard Receipt**                       | HTML    | Default — logo, items, totals, payment. Covers most stores                   |
| **Standard Receipt (RTL)**                 | HTML    | Same as Standard, mirrored for Arabic / Hebrew / Persian / Urdu              |
| **Minimal / Modern**                       | HTML    | Same info as Standard, packed into less vertical space                       |
| **Detailed Receipt**                       | HTML    | Full tax invoice — SKU column, unit price, per-rate tax breakdown, addresses |
| **Gift Receipt**                           | HTML    | Items only — prices hidden. Includes gift message and return policy          |
| **Invoice**                                | HTML    | Full-page A4/Letter invoice. Adds a "How to pay" panel for unpaid orders     |
| **Packing Slip**                           | HTML    | Warehouse companion — items + quantities, ship-to, no prices                 |
| **Quote / Estimate**                       | HTML    | Pre-sale document with pricing and terms — no payment section                |
| **Narrow Receipt**                         | HTML    | Monospace receipt for narrow paper or HTML-capable thermal printers          |
| **Simple Thermal Receipt (58mm)**          | Thermal | Clean 58mm thermal layout                                                    |
| **Simple Thermal Receipt (80mm)**          | Thermal | Clean 80mm thermal layout — most common                                      |
| **Simple Thermal Receipt 80mm (RTL)**      | Thermal | RTL counterpart for 80mm. Requires a printer with an Arabic codepage         |
| **Detailed Thermal Receipt (58mm / 80mm)** | Thermal | Adds tax breakdown, addresses, refunds, payments, terms, barcode             |
| **Kitchen Ticket**                         | Thermal | Items only, large font, no prices — for prep stations                        |

Most of the bundled templates **adapt to your store's tax settings automatically** — tax-inclusive stores see gross prices and a "Tax included" line; tax-exclusive stores see net prices with tax added as a separate line. The **Detailed** family always shows a full tax breakdown regardless of the setting.

### WP Overnight invoice and packing slip templates[​](#wp-overnight-invoice-and-packing-slip-templates "Direct link to WP Overnight invoice and packing slip templates")

If your site also uses [PDF Invoices & Packing Slips for WooCommerce](https://wordpress.org/plugins/woocommerce-pdf-invoices-packing-slips/) by WP Overnight, WCPOS automatically adds two extra templates to **Your Templates**:

| Template                        | Format               | What it's for                                                          |
| ------------------------------- | -------------------- | ---------------------------------------------------------------------- |
| **Invoice (WP Overnight)**      | Server-rendered HTML | Uses WP Overnight's configured invoice document for the POS order      |
| **Packing Slip (WP Overnight)** | Server-rendered HTML | Uses WP Overnight's configured packing-slip document for the POS order |

These templates do not copy WCPOS's built-in invoice or packing-slip layouts. They ask WP Overnight to render the document for the POS order, so your existing invoice numbers, branding, legal/tax fields, and WP Overnight template customisations stay consistent between online and in-store orders.

They appear only while the WP Overnight plugin is active. The output opens as HTML in the WCPOS print screen rather than as a separate PDF download. Because the document is rendered on the server, the POS needs a connection to your site when printing these templates; use the bundled HTML or thermal templates for offline printing.

## Per-store assignments[​](#per-store-assignments "Direct link to Per-store assignments")

If you have more than one [store](/stores/.md) (Pro), each store can have its **own template selection and ordering**, separate from the site-wide defaults. The cafe down the road can run a small thermal receipt with a different logo and address; the warehouse can use a packing slip; the main shop can keep the standard receipt — all from the same template gallery.

Set it up from **WP Admin → POS → Stores**, then open the store you want to configure. The **Edit Store** page has a **Receipt Templates** section with a *"Store specific receipt templates"* toggle:

* **Toggle off** *(default)* — the store inherits the site-wide template list from the main **POS → Templates** page.
* **Toggle on** — the store gets its own template selection and ordering, separate from the site-wide defaults. Drag-handle reorder works the same way.

The same Edit Store page is also where each store's **letterhead** lives (logo, address, contact details, and the *Receipt Messages* block — Complimentary Close, Returns Policy, Footer). The bundled templates pull from these per-store fields, so a single "Standard Receipt" template can carry different branding at different locations.

When a cashier signs in at a store, only that store's active templates appear in the receipt dropdown.

Site-wide vs per-store

The **Templates** page in WP Admin sets the default for the whole site. The per-store override exists so a single template (e.g. a Standard Receipt) can carry different branding at different locations, or so one location can use a layout the others don't. If all your stores want the same templates, just leave per-store assignments empty and the site-wide defaults apply.

## Option 2 — Ask AI to tweak it[​](#option-2--ask-ai-to-tweak-it "Direct link to Option 2 — Ask AI to tweak it")

If the gallery is close but not quite right, an AI assistant can change it for you in minutes — and you don't need to know HTML.

1

#### Copy the template

Open the template you want to start from in **WP Admin → POS → Templates**, click into the editor, and select all of the text on the left side (Ctrl/Cmd + A). Copy it.

2

#### Paste it into ChatGPT or Claude

Open [ChatGPT](https://chat.openai.com) or [Claude](https://claude.ai). Paste the template, then write what you want, in plain English:

3

#### Describe what to change

Tell the AI exactly what you want. Examples that work well:

* *"Make the store name bigger and centered."*
* *"Add a thank-you message in italic at the bottom."*
* *"Hide the customer name. Add the phone number underneath the order number instead."*
* *"Change the barcode to a QR code that links to my returns page."*
* *"Add a tagline 'Family-owned since 1987' under the store name."*

The AI will hand you back a modified template.

4

#### Paste it back

Copy the AI's response. Back in the WCPOS template editor, select all (Ctrl/Cmd + A), paste the new version, and click **Update**. The preview on the right refreshes so you can see what happened. If it doesn't look right, ask the AI to fix it — describe what went wrong.

Best practice

Every click of **Use Template** in the gallery makes a fresh editable copy, so the original stays safe. If you're experimenting, you can use the same gallery template more than once — rename your copies *(Receipt v1, Receipt v2)* and toggle between them while you decide.

What about variables?

The bits like `{{store.name}}` and `{{order.number}}` are **placeholders** for your real data. The AI understands these — you don't need to. If you want to know every placeholder available, see the [Receipt Data Reference](/receipts/receipt-data.md).

## Option 3 — Edit it by hand[​](#option-3--edit-it-by-hand "Direct link to Option 3 — Edit it by hand")

If you know a bit of HTML (or you're working with a developer), you can edit the template directly in the in-app editor. The editor has live preview, syntax highlighting, a searchable field picker, undo/redo, and find-and-replace.

Choose your engine:

* **[HTML Templates](/receipts/html-templates.md)** — Mustache-style `{{variable}}` placeholders. Renders client-side, works offline. **Recommended for most stores.**
* **[Thermal Templates](/receipts/thermal-templates.md)** — XML for ESC/POS thermal printers. Same template produces both the screen preview and the printer output.
* **[Receipt Data Reference](/receipts/receipt-data.md)** — Every placeholder you can use, grouped by section.

Legacy PHP templates

If you used to override the receipt with a PHP file in your theme (`yourtheme/woocommerce-pos/receipt.php`), that still works. It's now labelled **Legacy PHP Template** in the gallery, and it sits alongside the new logicless and thermal engines. The WP Overnight integration also uses the server-rendered path because the third-party document API renders HTML on the server. New customisations should use the gallery or the in-app editor instead — they work offline, preview live, and don't need a server round-trip.

## Common customisations[​](#common-customisations "Direct link to Common customisations")

Quick answers to the questions we get most often.

How do I add my store logo?

Logos come from your store settings, not the template itself. Go to **WP Admin > POS > Settings > Stores**, edit your store, and upload a logo there. Every bundled template that shows a logo will use it automatically.

If you want to change *where* the logo appears in the template, edit the template and move the `{{#store.logo}}<img src="{{store.logo}}" ...>{{/store.logo}}` block to where you want it.

How do I change the footer text (e.g. 'Thank you for your purchase!')?

Two options:

1. **Easiest** — set it once for every receipt at **WP Admin > POS > Settings > Stores > Store details > Receipt footer / personal note**. Bundled templates pick it up automatically; if no footer is set, they fall back to a friendly default like *"Thank you for your purchase!"*.
2. **In a single template** — edit the template and replace the footer text directly. Look for `{{store.personal_notes}}` or the literal thank-you line.

How do I add a tagline or slogan under the store name?

Edit the template and add a line under `{{store.name}}`:

```
<div style="font-style: italic; color: #6b7280;">Family-owned since 1987</div>
```

In a thermal template:

```
<align mode="center"><text>Family-owned since 1987</text></align>
```

How do I hide prices (for a gift receipt)?

Click **Use Template** on the **Gift Receipt** card in the gallery — it hides every price and total while still showing items, SKU, attributes, and the gift message. No editing required.

If you'd rather build your own price-free receipt, copy any template and delete the `{{...total...}}`, `{{...price...}}` and `{{#totals}}...{{/totals}}` blocks.

How do I change the barcode to a QR code?

Find the `<barcode>` element in your template and change the `type` attribute:

```
<!-- Default: Code 128 barcode of the order number -->

<barcode type="code128">{{order.number}}</barcode>



<!-- Switch to a QR code -->

<barcode type="qrcode">{{order.number}}</barcode>



<!-- Or encode something else, like a returns URL -->

<barcode type="qrcode">https://example.com/returns?order={{order.number}}</barcode>
```

The same `<barcode>` syntax works in both HTML and thermal templates. Other supported types include `ean13`, `ean8`, `upca`, `pdf417`, and [everything bwip-js supports](https://github.com/metafloor/bwip-js/wiki/Supported-Barcode-Types).

How do I send a different template to a specific printer?

In the POS app, go to **POS > Settings > Printing**, then look under **Receipt templates**. You'll see each of your active templates with a printer dropdown next to it. Pick the printer you want, or leave it as **Auto**.

* **Auto** matches templates to printers automatically — thermal templates go to thermal printers, HTML templates go to the system print dialog.
* A **specific printer** overrides Auto and always sends that template there.
* At print time, the cashier can override either of the above with the printer dropdown on the receipt screen.

Routing is stored per-device, so each iPad or computer can have its own setup.

My receipt still shows the old version after I edit it

Click the WordPress **Update** button on the template edit screen. The editor doesn't auto-save — your changes only persist when you Update.

For **Legacy PHP templates**, the preview in the editor shows the *last saved* version, not what you're typing. Save first, then refresh the preview.

The preview is blank or shows 'No POS orders found'

This only happens with **Legacy PHP templates**, which need a real order to preview against. Process a single POS order — even a $0 test sale — and the preview will start working.

Logicless (HTML) and thermal templates always have sample data to fall back on, so they preview fine even on a brand-new store.

I made a mess — how do I start over?

Three safety nets:

1. The editor has **Undo** (Ctrl/Cmd + Z) for in-session changes.
2. Every save creates a WordPress **revision** — open **Revisions** on the edit screen to compare and restore any prior version.
3. If you started from a gallery template, click **Delete** on your copy in *Your Templates*, then click **Use Template** on the same gallery card again. You get a fresh, untouched copy.

## When to ask for help[​](#when-to-ask-for-help "Direct link to When to ask for help")

* The template editor won't load, or saves don't stick.
* The receipt prints fine on one device but not another.
* You need a fiscal/legal layout for a specific country (Italy, Brazil, Spain, etc.) — these are usually handled by [WCPOS Pro](/getting-started/pro-license.md) or a country-specific integration.
* You're trying to do something custom and AI can't quite get it right.

Open a [support ticket](https://wcpos.com/support) and paste the template you're working with — that gives us everything we need to help.
