Upsell Offer

What the Upsell Offer widget does Upsell Offer renders a single, distinct post-purchase-style pitch — one product, one accept button, one decline link — driven by a Tiger upsell funnel rather than by whatever is currently in the shopper’s cart. It’s built for a dedicated “offer page” reached through a funnel URL: a customer completes […]

5 min read Updated July 23, 2026
Upsell Offer — features & options

What the Upsell Offer widget does

Upsell Offer renders a single, distinct post-purchase-style pitch — one product, one accept button, one decline link — driven by a Tiger upsell funnel rather than by whatever is currently in the shopper’s cart. It’s built for a dedicated “offer page” reached through a funnel URL: a customer completes an order, is routed to this page, and is shown one more product they can add to that same order with a single click, without re-entering payment details. The widget itself doesn’t define the offer; it reads its context from a tiger_upsell_funnel post (via Tiger_Woo_Upsell_Funnel::current_offer_context()) which supplies the funnel ID and, when reached through a real funnel flow, the originating order and order key.

This makes Upsell Offer fundamentally different from a normal “related products” block: it’s tied to a purchase-flow order and funnel configuration, not to browsing context, and its accept/decline actions post back to a dedicated AJAX decision endpoint rather than adding to a shopping cart.

How to set it up

The widget’s most important content control is Preview Funnel (editor only) — a select populated from your published tiger_upsell_funnel posts. This exists purely so you can see a realistic preview while building the page in Elementor; on the live site, the funnel is always determined by the URL a customer actually arrives on, not by this dropdown. Beyond that, you have Accept Button text (default “Yes! Add this to my order”, dynamic-tag enabled), Decline Link text (default “No thanks, I’ll pass on this offer”), and a Show product image + price switcher (on by default) that toggles the product image/name/price block above the buttons.

Styling is scoped to the Accept Button section on the Style tab: Background and Text Color (both color pickers, defaulting to a green #16a34a and white respectively), a responsive Padding control, and a Radius slider up to 60px. There’s no separate styling for the decline link or the product block — those inherit your theme’s link and typography styles, which keeps the decline option visually secondary to the accept button by default, matching standard upsell-page conversion practice.

Non-obvious behavior

The offer’s actual content — which product, at what quantity, and any discount — is configured on the funnel post itself (_funnel_product_id, _funnel_quantity, _funnel_discount_type/_funnel_discount_value), not on the widget. The widget computes the discounted price the same way the Order Bumps widget does (percent off, fixed amount off, or a straight override price against the product’s regular price) and multiplies it by the configured quantity, showing a struck-through original price when a discount applies.

Clicking Accept or Decline doesn’t reload the page or touch the cart — a click handler on .tiger-upsell__accept/.tiger-upsell__decline posts the decision, along with the widget’s nonce, funnel ID, order ID, and order key (all embedded as data-* attributes on the wrapper), to an upsell decision AJAX endpoint that appends the product directly onto the existing order server-side. This is why the widget requires real funnel context to do anything meaningful: without an order/order-key pair, there’s nothing for the endpoint to attach the upsell to.

If there’s no funnel context at all (for example, someone lands on the page directly rather than via a real funnel URL, and no Preview Funnel is set in the editor), the widget shows a placeholder explaining it displays an offer only when reached via the funnel URL — it never fabricates a fallback offer. Likewise, if the configured funnel has no product assigned, it shows a distinct placeholder for that case, which is useful for catching a half-configured funnel before it goes live.

When to use this widget vs. related widgets

Reach for Upsell Offer when you want a focused, single-product pitch presented as its own step in the purchase flow — typically a dedicated thank-you/offer page rather than something inline on checkout. That’s the key distinction from Order Bumps: bumps are small, inline, checkbox-style add-ons shown alongside the items a customer is already buying during checkout itself, while an upsell is a separate, higher-consideration offer presented as its own moment, after commitment, with a real accept/decline decision. Don’t use Upsell Offer as a generic “you might also like” block on product or cart pages — it has no browsing-context mode and will simply show a placeholder outside of real funnel traffic.

Practical tips

  • Always test the offer page by walking through the actual funnel URL rather than just previewing in Elementor — the Preview Funnel control only feeds the editor preview and has no effect on live behavior.
  • If a funnel’s offer page is showing the “no product configured” placeholder in production, check the funnel post’s product assignment first — it’s a much more common cause than a widget misconfiguration.
  • Because Accept/Decline post directly to the order via AJAX, avoid pairing this widget with page caching that might serve a stale nonce or stale order-key data attribute to returning visitors; exclude offer pages from full-page cache.
  • Keep the Decline Link phrased as a real, low-guilt opt-out (the default “No thanks, I’ll pass on this offer” is intentionally neutral) — since the widget gives it no dedicated styling, avoid overriding it with theme CSS that makes it look like another primary action.

Frequently asked questions

The Upsell Offer widget only has real content when it’s reached through an actual Tiger upsell funnel URL carrying an order and order key, or when a Preview Funnel is selected in the Elementor editor for design purposes. Visiting the page URL directly outside of a funnel flow, with no preview funnel set, gives the widget nothing to render, so it shows a placeholder instead of fabricating an offer.

No, it doesn’t touch the cart at all. The Accept button posts the decision, along with the funnel ID, order ID, order key, and a nonce, directly to an upsell decision AJAX endpoint that appends the product onto the customer’s already-placed order server-side — the same one-click purchase pattern used by classic post-checkout upsell funnels.

Still stuck?

We’re here to help

Can’t find what you’re looking for, or hit something that looks like a bug? Reach the support team or ask the community.