# ThanksEasy: Thank-You Page Setup Tasks and Features

> Set up the personalised message, popup offers, cross-sell blocks, delivery timeline, and the full features reference.

---

This page is part of the [ThanksEasy guide](/docs/thankseasy). Start there for what the extension does, installation and the frequently asked questions.

## Display a personalised thank-you message with the order number

Customers want confirmation that their order went through - a message with their order number removes doubt.

### How to set it up

1. Go to:
   Stores > Configuration > Moogento > ThanksEasy > Design: Thanks Page > Design: Top Section

2. Set:
   - **Thanks message: Position** = your preferred position (above or below the order details)
   - **Thanks message: Content** = your message copy, using template variables:
     - `{{order_id}}` - inserts the order increment ID (e.g. `#100000042`)
     - `{{order_link}}` - a URL to the order detail page; use as an `href` value
     - `{{purchase_order_id}}` - PO number if set, otherwise empty (Growth and Pro plans)
     - `{{tick}}` - a green tick icon
     - `{{email}}` - an email icon
     - `:)` `:D` `<3` - emoji shortcodes

3. Save config and run `php bin/magento cache:clean`

### Notes

- For guest orders, `{{order_link}}` falls back to `#<incrementId>` since guests cannot log in to view the order
- Use `{{purchase_order_link}}` only outside an `href` attribute - it renders a complete `<a>` element

---

## Show a fullscreen popup offer immediately after checkout (Pro)

A fullscreen popup with a time-limited discount is the highest-visibility upsell placement ThanksEasy provides.

![Fullscreen Popup Offer config](images/config-popup.png)

### How to set it up

1. Go to:
   Stores > Configuration > Moogento > ThanksEasy > Design: Fullscreen Popup Offer

2. Set:
   - **Enable** = Yes
   - **Offer: Offered product strategy** - choose one:
     - *Cross-sell* - products linked as cross-sells to items in the order
     - *BOGO* - one of the products already in the order
     - *Cross-sell then BOGO* - cross-sells first; falls back to BOGO if none qualify
   - **Discount: Type** = Percent or Fixed
   - **Discount: % Amount** (or Fixed amount) = your discount value
   - **Popup: Duration** = minutes before auto-close (default 1)
   - **Limits: Per customer per day** = Yes to prevent repeat displays

3. Optionally set:
   - **Filter by: Product attribute** - only ordered products with this attribute value trigger an offer; the Value cell next to it adapts to the attribute you pick
   - **Filter-in by: Category** - only ordered products in these categories trigger an offer (their cross-sells are offered). Shown when the strategy is *Cross-sell* or *Cross-sell then BOGO*
   - **Filter-in by: Minimum final price** - skip products below a price threshold
   - **Offer text for: Cross-sell products** / **Offer text for: BOGO products** - customise the headline using `{{product_name}}`, `{{discount}}`, `{{price}}`, `{{countdown}}`

   ![Product attribute filter with an attribute-aware value picker](images/config-popup-attribute-filter.png)

4. Save config

### Notes

- If no qualifying products are found (all out-of-stock, missing images, or priced at $0 after discount), the popup is suppressed rather than shown empty
- Popup and countdown features are gated by your license plan - confirm your plan on moogento.com if these fields are greyed out
- **Filter by: Product attribute** adapts its Value cell to whichever attribute you choose: dropdown, multiselect, and boolean attributes show a dropdown of that attribute's real option labels (matching is done by label, not internal ID); text-like attributes keep a plain text box with a type hint and real example values underneath. Media and image attributes never appear in the attribute picker
- If an option you previously selected is later deleted from the attribute, the Value cell shows "Current: {value} (no longer an option)" until you choose a replacement

---

## Add inline cross-sell or featured-product blocks below the order details (discounts Growth or Pro, countdowns Pro)

The page-base sections let you add a product grid or a single featured product directly on the thank-you page, each with an independent discount and countdown.

![Page-base Section 1 config](images/config-page_layout_base_1.png)

### How to set it up

1. Go to:
   Stores > Configuration > Moogento > ThanksEasy > Design: Thanks Page > Design: Page-base Section 1

2. Set:
   - **Enable** = Yes
   - **Which: Block** - choose *Cross-sell products*, *Single product*, *CMS block*, or *HTML*
   - For *Cross-sell products*: set attribute/category filters, product count (default 4), and whether to fill empty slots (see "How the Cross-sell products block picks products" below)
   - For *Single product*: enter the product SKU and choose button action (*Add to Cart* or *View Product*)
   - **Discount: Type** = Percent, Fixed, or None
   - **Discount: Countdown timer** = Yes to show a countdown clock; set **Countdown time limit** in minutes (default 5)
   - **Limits: Per customer per day** = Yes to avoid repeat discounts

3. Optionally configure **Design: Page-base Section 2** for a second independent block below Section 1

4. Save config

### Notes

- Title fields change based on discount and countdown state - there are separate fields for: *Discounts during countdown*, *Discounts after countdown*, *Discounts no countdown*, and *No discount*
- Use `{{countdown_promo}}` in the title to render the animated countdown clock (ThanksEasy Pro) or a fixed number
- Discounts applied via ThanksEasy are time-limited: customers have the duration set in **General > Time limit** (hours) to complete checkout before prices revert
- **Filter by: Product attribute** in each section uses the same Value cell as the popup's attribute filter, but here it limits the products *offered*, not the products ordered
- In the page sections, **Filter-in by: Category** limits the products *offered*. In the popup, it limits which *ordered* products trigger an offer

### How the Cross-sell products block picks products

**With a category selected** in **Filter-in by: Category** (for example a "Monthly Specials" category), the category is the pool of products the section offers:

1. Cross-sells of the ordered products that are in the selected category come first
2. Remaining slots are filled with other products from the selected category (subcategories included)

Only products from the selected category are shown, with the ones related to the order first. The **Include random products?** setting does not change this. If the category has no eligible products, the section falls back to the no-category behaviour below so it is not left empty.

**With no category selected:**

1. Cross-sells of the ordered products come first
2. If **If empty slots: Include random products?** = Yes, remaining slots are filled with other products: products from across the store (excluding poorly reviewed ones) if some cross-sells were found, or products from the first ordered product's categories if none were

In both cases, products must be enabled, visible, in stock, have an image, and pass the attribute and minimum-price filters. Products already in the order are never offered.

To make a particular product show first for a particular purchase, add it as a cross-sell on the purchased product (**Catalog > Products > [product] > Related Products, Up-Sells, and Cross-Sells**).

There is no separate "category" block: use *Cross-sell products* with **Filter-in by: Category** to feature a promotional category.

> The category-first behaviour above needs ThanksEasy 2.9.53 or later. On 2.9.52 and earlier, the selected category only narrowed the cross-sells, and empty slots were filled with products outside the selected category.

---

## Handle products that are already on sale

Products with an existing sale price need special handling in your ThanksEasy offers. Choose how ThanksEasy behaves when a suggested product already has a discount applied.

### How to set it up

1. Go to:
   Stores > Configuration > Moogento > ThanksEasy > Design: Thanks Page > Design: Page-base Section 1 (or Section 2)

2. Look for the **Discount: Already-discounted products** dropdown (appears only when discounts are enabled)

3. Choose one of three modes:

   - **Best Price (Recommended, Default)** - ThanksEasy shows the lowest price between its suggested discount and the product's current sale price. The discount badge only appears if the ThanksEasy offer genuinely beats the live price. This ensures customers always see the best available deal without confusion from stacking multiple promotions.
   
   - **Exclude Already-Discounted Products** - Products with an existing sale price are hidden from ThanksEasy suggestions entirely. Use this if you never want to offer additional incentives on items that are already discounted elsewhere.
   
   - **Stack on Current Price (Legacy)** - The ThanksEasy discount is applied on top of the product's current sale price, resulting in a lower final price. Use this only if your site explicitly supports stacking promotions and you want to advertise the cumulative savings.

4. Save config

### Notes

- The default mode is **Best Price**, which changed the behavior for existing installations - products are no longer stacked with additional discounts by default.
- Review your discount badge presentation after updating to ensure it reflects your new mode choice.
- The discount mode setting applies independently to each page-base section (Section 1 and Section 2).

---

## Show delivery timeline and calendar tools

Telling customers exactly when to expect their order - right on the success page - reduces "where is my order?" emails.

![Order Details Section config](images/config-page_layout_order_details.png)

### How to set it up

1. Go to:
   Stores > Configuration > Moogento > ThanksEasy > Design: Thanks Page > Design: Order Details Section

2. Set:
   - **Enable** = Yes
   - **Show section: Shipped By Date (SBD)** = Yes; set **SBD: Period from order** in days (default 5)
   - **Show section: Delivered By Date (DBD)** = Yes; set **Delivered By: Period from order** in days (default 14)
   - **DBD tools: + Apple Calendar** = Yes to add an `.ics` download button for the Delivered By date
   - **DBD tools: + Google Calendar** = Yes to add a Google Calendar link
   - **DBD tools: Track/QR in Delivered By** = Yes to show a tracking icon; if **TrackEasy** is installed, hovering reveals a QR code preview and clicking opens the TrackEasy tracking page

3. Optionally set guide copy:
   - **Show section: 'Shipped By Date (SBD)' guide** = Yes and fill in **Content** with plain-language copy explaining your shipping process
   - **Show section: 'Delivered By Date (DBD)' guide** = Yes and fill in **Content** with delivery-estimate context

4. Save config

### Notes

- Shipped By and Delivered By dates are estimates calculated from the order date - they are not connected to carrier APIs unless TrackEasy is also installed
- Apple Calendar (`.ics`) and Google Calendar tools require a Pro plan; the Track/QR icon requires a Growth plan
- To suppress the country name from the shipping address (useful for single-country stores), set **Shipping info: Hide this 'country name'**

---

## Enable time-limited free shipping on the success page

Offer free shipping as an incentive to add another item within a short window after purchase.

### How to set it up

1. First, activate the shipping method:
   - Go to **Stores > Configuration > Sales > Delivery Methods**
   - Find **ThanksEasy Free Shipping** and set **Enabled** = Yes

2. Then configure the offer:
   - Go to **Stores > Configuration > Moogento > ThanksEasy > General**
   - Set **Discounts: Enable time-limit on free shipping?** = Yes
   - Set **Discounts: Time limit** = number of hours the offer remains valid (default 1)

3. Save config

### Notes

- When the time limit expires, the free shipping is automatically removed from the cart and product prices revert to normal
- The countdown affects both the fullscreen popup offer and the page-base inline blocks simultaneously

---

## Set up Google Analytics UTM tracking

Every product link on the success page can carry UTM parameters so you can measure which offer generates revenue.

### How to set it up

1. Go to:
   Stores > Configuration > Moogento > ThanksEasy > Setup: Google Analytics

2. Set:
   - **General: utm_source** - identifies ThanksEasy traffic (default: `thankseasy`)
   - **General: utm_medium** - identifies the link type (default: `cta`)
   - **Promo products: utm_campaign** - campaign name for discounted product clicks (default: `TX pro`)
   - **Non-promo products: utm_campaign** - campaign name for non-discounted product clicks (default: `TH reg`)

3. Save config

### Notes

- UTM settings are global (not per store view)
- Changes only apply to links generated for new orders - existing cached pages are not affected

---

## Features reference

### Confetti animation

- Plays a falling-confetti animation on page load to celebrate the purchase
- Toggle at: **Stores > Configuration > Moogento > ThanksEasy > Design: Thanks Page > Design: General > Show: Confetti**
- Config path: `moogento_thankseasy/moo/general_show_animation`
- Works on Luma, Porto, and Hyvä themes

### Page background

- Supports three modes: **Full** (single image or built-in ThanksEasy design), **Tiled** (repeating pattern), and **Color** (solid hex colour)
- Custom image upload available for both full and tiled modes; accepted formats: PNG, GIF, JPG, JPEG
- Config path: `moogento_thankseasy/moo/general_background_yn`
- On Hyvä, background mode values are stored as strings (`full`, `tiled`, `color`) - do not re-save this field from a non-Hyvä admin session if the value has been customised for Hyvä compatibility

### Custom CSS

- Paste arbitrary CSS into **Design: Thanks Page > Design: General > Custom CSS** to override colours, fonts, or layout without editing template files
- Config path: `moogento_thankseasy/moo/general_custom_css`
- The config field includes examples for changing countdown timer colours and background-image behaviour

### Offer price floor and quantity cap

- **Minimum offered price (% of current price)** - set a floor as a percentage of the product's current price to prevent offers that are too aggressive (e.g. 50 blocks offers below half price). Set to 0 to disable. Config path: `moogento_thankseasy/general/min_price_floor_pct`
- **Maximum quantity per ThanksEasy offer** - caps how many units are included in a single offer (default 1). Raise only for qty-multiplier promotions. Config path: `moogento_thankseasy/general/max_offered_qty`
- Both fields are under **Stores > Configuration > Moogento > ThanksEasy > General**

### Attribute-aware product filtering

- Filter by any product attribute in the Fullscreen Popup Offer, Page-base Section 1, and Page-base Section 2 groups. In the page sections it limits the products offered; in the popup it limits which ordered products trigger an offer
- The Value cell adapts automatically to the attribute you select: dropdown, multiselect, and boolean attributes show a dropdown of that attribute's real option labels; text-like attributes keep a text box with a type hint and example values underneath
- Media and image attributes never appear in the attribute picker
- If a previously selected option is later deleted from the attribute, the field shows "Current: {value} (no longer an option)" so you know to pick a replacement
- Config paths: `moogento_thankseasy/popup/attribute_filter`, `moogento_thankseasy/moo/base1_attribute_filter`, `moogento_thankseasy/moo/base2_attribute_filter`

### Guest account creation prompt (Pro)

- Shows a dismissible card on the success page inviting guest customers to create an account
- Uses Magento's built-in `checkout/account/delegateCreate` flow - no custom data collection
- Configurable: position (top/bottom), headline, sub-copy, up to three benefit bullet points, button label, and dismiss link label
- Config path: `moogento_thankseasy/accountprompt/*`
- Requires a Pro plan license; only renders for guest customers

### Instant Buy button labels

- The buy button label differs based on whether Instant Purchase is available for the customer
- **Buy button label: Instant Buy** - shown when Instant Purchase is enabled (e.g. "Instant Purchase", "Buy Now")
- **Buy button label: Add to Cart** - shown when Instant Purchase is not available (e.g. "Add to Cart", "Get It!")
- Config path: `moogento_thankseasy/general/button_text` and `moogento_thankseasy/general/button_text_not_instant`

### Live preview

- Enter any order increment ID in **Design: Preview > Preview order id** to load the thank-you page for that order without navigating through checkout
- Useful for checking layout and copy changes before customers see them

---

## Advanced configuration

### TrackEasy integration

#### What it does

When **TrackEasy** is installed and enabled, ThanksEasy embeds a tracking link and optionally a QR code directly in the Delivered By tile. Customers can scan the QR code on mobile to open the TrackEasy tracking page without having to search their email for a tracking link.

#### Setup

1. Install and enable the **TrackEasy** module (sold separately)
2. In ThanksEasy config, go to **Design: Thanks Page > Design: Order Details Section**
3. Set **Show section: Tracking** = Yes
4. Set **Include: TrackEasy QR code** = Yes to add the QR code alongside the tracking link
5. Set **DBD tools: Track/QR in Delivered By** = Yes to show the tracking icon on the Delivered By tile

#### Notes

- If TrackEasy is not installed, the tracking icon falls back to Magento's standard order-tracking/guest-form link
- QR codes are generated from an external image service, so the store needs outbound HTTPS to display them
- When ShipperHQ is installed alongside TrackEasy with the ShipperHQ bridge enabled, the Delivered By date is sourced from the ShipperHQ selected delivery date automatically - no additional ThanksEasy configuration is needed

### Swissup Sold Together integration

ThanksEasy can render a **Sold Together** block (from Swissup's Sold Together extension) as the content for a page-base section. This is configured by selecting the Sold Together block type when setting up Section 1 or Section 2 - no additional settings are required beyond having the Swissup module installed and configured with product associations.

---

## Other pages in this guide

- [ThanksEasy overview, installation and FAQs](/docs/thankseasy)
- [ThanksEasy: Themes, Tips and Troubleshooting](/docs/thankseasy-themes-and-troubleshooting)

<!-- docs-split: part-of="thankseasy" -->
