In-Depth Guides

Scheduling, visibility rules, and troubleshooting

Most widget problems aren't "the fee is broken". They're "the fee showed up when it shouldn't have" or "the widget isn't there at all". This guide covers the two controls that decide when the widget appears (date scheduling on a charge rule, and Visibility Control Rules), the Theme Selectors that decide where it appears, and a symptom-by-symptom playbook you can work through in order.

Who this is for

  • Anyone diagnosing a widget that isn't behaving
  • Merchants running seasonal, weekend, or conditional fees

Time needed

  • 10 minutes to set up a schedule or a visibility rule
  • 5-15 minutes to work a troubleshooting case end to end

You'll need


1. Schedule a fee to specific dates

Scheduling lives on the charge rule itself, not on the widget. Go to Settings → Rules → + Create Rule (or click the pencil in the Actions column to edit an existing rule) and tick Restrict to specific dates. Its helper text reads "Only charge this fee during certain dates, months, or days of the week."

Ticking the box reveals a Schedule type select, and what you pick there decides which date fields appear underneath.

The Create Charge Rule form with

Marker 1 is the Restrict to specific dates checkbox. Nothing below it exists until it's ticked. Marker 2 is Schedule type. Markers 3 and 4 are the Start date and End date inputs this schedule type reveals; another type puts different fields here.

The four schedule types

Schedule type option Fields it reveals Use it for
Date range (one-time) Start date and End date (native dd/mm/yyyy date inputs) A one-off window that never repeats
Recurring yearly range (e.g. every Dec – Jan) Start month, Start day, End month, End day A window that repeats every year, including one that crosses New Year
Specific months A month multi-select A season, where the exact days don't matter
Days of the week A weekday multi-select A fee that only applies on certain days

⚠️ Heads up: the checkbox is Restrict to specific dates. There is no "Enable date schedule" toggle or "Date Schedule" section on screen. If you're looking for one, that's the control you want.

Worked examples

Goal Schedule type What to enter
Black Friday weekend only Date range (one-time) Start date = the Friday, End date = the Monday. Once the window passes the rule goes quiet on its own
December–January holiday surcharge Recurring yearly range (e.g. every Dec – Jan) Start month December, Start day 1, End month January, End day 5. Use this type whenever the window crosses the year boundary
Summer surcharge Specific months June, July, August. Repeats every year, no day numbers to get wrong
Weekend handling fee Days of the week Saturday and Sunday

What happens when a schedule is inactive

Outside the window the widget hides entirely and no fee is added. The rule isn't deleted or disabled: it stays in the rules table and reactivates by itself when the window comes round again. A missing widget reads as a bug, so check the schedule before anything else.

Which clock does it use?

Schedule evaluation uses the shopper's browser time, not store time and not server time. A shopper in a timezone ahead of you sees a Black Friday fee before you do; one behind you still sees it after you think it ended. Add a day of slack at each end of a tight window.


2. Visibility Control Rules

Scheduling answers "when". Visibility Control Rules answer "for which carts and which customers". Find them at Settings → General, under Visibility Control Rules: "Control when the widget is shown to customers based on cart, customer, and product conditions." The info banner sets the limit: "Configure up to 5 rules to control widget visibility."

TackOn's Visibility Control Rules section with rules enabled: Visibility Logic reading

Marker 1 is the Enable Visibility Rules button, here reading Enabled. While it reads Disabled the widget is always visible and everything below is ignored. Markers 2 and 3 are Visibility Logic and Rule Matching, which change what every rule underneath means. Marker 4 is + Add Rule; marker 5 is Rule Type on the first rule card.

The three settings that frame everything

Control What it does
Enable Visibility Rules Toggles between Disabled and Enabled. Helper: "When disabled, widget will always be visible"
Visibility Logic Sets the direction. In the screenshot it reads Hide widget when rules match, helper "Widget will be hidden when rules pass"
Rule Matching Match ANY rule (OR) - At least one rule must be true means one match is enough; Match ALL rules (AND) - Every rule must be true requires every enabled rule to match. Helper: "At least one enabled rule must match"

Read the helper line under Visibility Logic before writing any rules. It says in plain words what a matching rule will do, and the same rules produce the opposite outcome under the other setting.

Each rule appears as a card headed Rule 1, Rule 2 and so on, with a category badge (for example Cart) and its own Enabled checkbox; the header counts them as Rules (N active / N total). Per rule you set Rule Type, Condition, and an Amount/value field whose shape follows the rule type.

Rule types by category

Category Rule types Conditions offered
Cart Cart Total, Cart Subtotal, Number of Items Greater than, Less than, Equals, Not equals, Between
Cart Total Discount Greater than, Less than, Equals, Not equals
Customer Customer Order Count, Customer Total Spent Greater than, Less than, Equals, Not equals, Between
Customer Customer Tags Contains, Does not contain, Contains any, Contains all
Customer Customer Type (Logged In / Guest / B2B Customer) Is, Is not
Customer Customer Email Domain Contains, Does not contain, Equals, Not equals
Cart Attributes Cart Attribute Exists, Does not exist, Equals, Not equals, Contains
Cart Attributes Cart Note Exists, Does not exist, Contains, Does not contain
Products Product in Cart, Product Type in Cart, Product Tag in Cart, Product Vendor in Cart Contains, Does not contain
Shipping Requires Shipping (Yes / No) Is, Is not
Shipping Cart Weight Greater than, Less than, Equals, Not equals, Between

The Condition list is filtered to what makes sense for the rule type, so a condition you expect may simply not be on offer. Product Type in Cart, for instance, only does Contains and Does not contain.

Three recipes

All three assume Visibility Logic = Hide widget when rules match. If you have the opposite direction selected, flip the condition.

Goal Rule Type Condition Value Why it works
Hide below a cart minimum Cart Total Less than 50 Carts under 50 match and get hidden; the rest keep the widget
Show only to guests Customer Type Is Logged In Signed-in customers match and are hidden; guests don't match, so they still see it
Show only when a product type is present Product Type in Cart Does not contain Electronics Carts without an Electronics item match and are hidden; carts with one fall through

With two or more rules, Rule Matching decides the join: Match ANY rule (OR) hides on the first match, which suits a list of exclusions; Match ALL rules (AND) hides only when everything lines up, which suits narrowing to one situation.

⚠️ Heads up: the catalogue above is the complete list of visibility rule types and conditions.


3. Theme Selectors

TackOn is a theme app embed. It isn't placed in a slot: it finds the cart elements by CSS selector and injects itself above the checkout button. Theme Selectors, at the bottom of Settings → General, configures that lookup: "Configure how the app finds cart elements in your theme."

The Theme Selectors section of TackOn's general settings: an unticked

Marker 1 is Sync Theme Selectors, the manual re-detect. Marker 2 is the status card. Check Last Synced, Active Theme and Synced Themes first when a widget goes missing after a theme change. Marker 3 is Save, which also runs a sync.

Two things to know:

  • Selectors sync automatically when you save settings. The on-screen note reads "Automatically sync selectors for all installed themes. Selectors are automatically synced when you save settings, or click the button below to sync manually." Save is usually enough; Sync Theme Selectors is what you reach for after changing your theme without touching TackOn.
  • Use custom selectors ("Override automatic theme detection with custom CSS selectors") is the escape hatch for a heavily customised theme where automatic detection can't find the cart. Leave it unticked unless detection has actually failed, because a hand-written selector stops tracking the theme as it changes.

⚠️ Heads up: if you think the app has no way to handle your custom cart markup, Theme Selectors is where to look.


4. Troubleshooting

Start at Analytics and read the Fee Orders and Revenue tiles. If fees are landing on some orders, the app is installed and working and you're chasing a conditional problem: schedule, visibility, or product binding. If the count is flat zero, suspect installation.

TackOn Analytics with a Last 30 days range selector, KPI tiles for Fee Orders, Revenue and Avg. Order Value, and a Fee Orders line chart

Notice the header note: this chart uses the Shopify timezone, while schedules run on the shopper's browser time. Don't treat a small mismatch at the edge of a scheduled window as a bug.

The widget doesn't appear

Symptom Likely cause Fix
Widget missing everywhere on the storefront The theme app embed was never turned on Online Store → Themes → Edit theme, open the App embeds panel, toggle TackOn Cart Widget on, then Save
Looking for a TackOn block to add to the cart page TackOn ships no block. It exists only as an app embed Use the theme editor's App embeds panel (see above)
Widget missing, everything else looks configured A visibility rule is hiding it Settings → General → Visibility Control Rules: set Enable Visibility Rules to Disabled to confirm, then correct the rule
Widget missing today but was there last week A date schedule has gone inactive Edit the rule, check Restrict to specific dates and the Schedule type fields
Widget missing on the cart drawer, present on the cart page The drawer's cart elements weren't picked up by the stored selectors Click Sync Theme Selectors, then Save, then hard-reload the storefront
Widget appears twice Use custom selectors is on and the selector matches more than one cart element Untick Use custom selectors, Save, and let automatic detection run
Widget appears, but with the wrong type, style, colours, or copy Changes on Settings → Cart Widget were never saved. The Live Preview redraws without saving, so they look applied Reopen Settings → Cart Widget and click Save; the button reads Saved when nothing is pending

The widget appears but the money is wrong

Symptom Likely cause Fix
Widget shows, no fee at checkout The customer never ticked the box: Default toggle state is Unchecked (opt-out by default) Expected behaviour. To default it on, change Default toggle state. TackOn switches Show confirmation popup at checkout on for you, so shoppers still consent explicitly
Widget shows, no fee, box was ticked The hidden charge product isn't in place Check the Charge product card on the TackOn Home screen. It should read Created
Fee is a multiple of what you expected Apply fee to entire cart (once) is unticked, so the fee is per item × quantity Edit the rule and tick Apply fee to entire cart (once) for a one-off cart charge
Fee is right on some products, wrong on others A non-default rule is bound to those products and overrides the default Settings → Products: review the bindings, see Product-specific fees
Fee is zero in a particular price band Price tiers in Multiple mode have a gap. The app warns but does not block, so it can be saved Open the rule; a Check your price tiers banner above the tier cards names the uncovered range. Edit the tiers so the ranges are contiguous, using 0 or an empty Max Price on the top tier for "and above"

Rules and schedules not firing

Symptom Likely cause Fix
Schedule window has started but nothing changed The shopper's browser clock hasn't reached the window yet Confirm the tester's device time; widen the window by a day at each end
Recurring yearly range never activates Start and end month/day entered in the wrong order for a window that crosses New Year Re-enter as Start December / End January. That direction is supported by design
A visibility rule seems to be ignored The rule card's Enabled checkbox is unticked, so it isn't counted in Rules (N active / N total) Tick Enabled on the rule card and save
A customer-based rule never matches Customer Tags, Customer Order Count, Customer Total Spent and Customer Email Domain need a signed-in customer; guests have empty tags, zero orders, zero spend Test while signed in, or pair the rule with Customer Type Is Guest
Adding a second rule made things worse Rule Matching is on Match ANY rule (OR) - At least one rule must be true, so one match is enough Switch to Match ALL rules (AND) - Every rule must be true if both conditions must hold

Styling problems

Symptom Likely cause Fix
Widget looks unstyled or misplaced after a theme change Stored selectors point at the old theme's markup Sync Theme Selectors, Save, hard-reload
Custom template renders but the toggle does nothing The template uses {{checkbox}}, which does not exist Replace it with {{checkboxProperties}}
Colours don't match the rest of the storefront Widget colours are set independently of the theme Settings → Cart Widget: see Designing the cart widget

⚠️ Heads up: {{checkbox}} is not a real template variable. The one that renders the working checkbox is {{checkboxProperties}}. Replace it wherever it appears. A template using {{checkbox}} produces a widget whose toggle does nothing at all.


5. Advanced: browser-console checks

These two reads settle most questions in about thirty seconds. Open your storefront cart page, open the browser console, and type each one.

window.TACKON_CONFIG holds the app's settings as synced to the theme, read from the shop metafield by the embed.

What you see What it means Fix
An object with settings in it The embed is on and configuration reached the theme Nothing. Look elsewhere
{} The embed is loading but no configuration is synced Settings → General → Sync Theme Selectors, then Save
undefined The app embed isn't enabled on this theme Turn on TackOn Cart Widget under App embeds

(window.NS is a legacy alias for the same object, which is why old snippets referencing it still work.)

window.TACKON_DATA holds the live data the visibility rules are evaluated against. Two keys: customer (tags, orders_count, total_spent, email, email_domain, has_account, accepts_marketing, first_name, last_name) and cart (the current cart).

This is the fastest way to prove why a visibility rule isn't matching. If has_account is false, tags is [] and orders_count is 0, the shopper is a guest and every customer-based rule reads as empty: a data problem, not a rule problem.


Related guides