Skip to content
LITE
Growth

Creatives, short links and the leaderboard

4 min readUpdated August 2026Applies to: Lite & Pro

Creatives#

Upload creatives under Squad Affiliate → Creatives, each one of four types: a banner image, a text link, or an email or social copy block. A banner renders as a sized, linked image; a text link renders as the creative’s name (or the URL, if you left it blank); an email or social creative is a stored block of copy with a {{link}} token that is swapped for the affiliate’s own referral URL wherever it appears. Every dynamic value — the image, the name, the link — is escaped on the way out, so an affiliate never hand-builds markup and can’t inject anything into it either.

A new programme starts with an empty creatives list, so the plugin can install a starter kit — five items (two swipe emails, two social posts, a homepage text link), plain and merge-tagged on purpose, since generic copy invites editing in a way that finished-looking copy doesn’t. Installing is idempotent by name: running it twice adds nothing and won’t duplicate anything you’ve already edited.

Every affiliate can generate a short link, and this is free: a visit to /go/{slug} (or ?go=slug, when pretty permalinks are off) records the referral cookie and redirects — to a page on your site or to any other host, since a link shortener that can only point at itself isn’t much of one. The prefix itself is filterable (squad_affiliate_link_prefix, default go), so a site that already uses /go/ for something else can move the whole feature to a different path without touching any printed link, because the rewrite rule is generated from the same filter every request reads.

What Pro sells is a chosen slug. Leave it blank and the plugin generates one (/go/a7-k2m9); ask for /go/jane on the free plugin and the request is refused, not silently swapped for a random one — the affiliate gets told to leave the field blank rather than print a URL that turns out wrong. If a slug collides with one that already exists — someone else claimed jane first — creation is refused outright rather than appended with a suffix, so an affiliate never ends up handing out a link that quietly belongs to somebody else. The auto-generated slugs never collide with each other either: the base is unique-checked and, on the rare clash, gets a -2, -3 and so on appended until it isn’t. A slug that’s already resolving keeps resolving even if a licence later lapses, because an affiliate’s printed business card shouldn’t break over the merchant’s billing.

By default a short link can forward anywhere. If you’d rather affiliates couldn’t point one off your own domain, a filter (squad_affiliate_link_destination_hosts) lets you supply an allow-list of destination hosts — your own site’s host is always implicitly allowed, so you never have to list yourself. A destination that fails the check, or isn’t a usable http(s) URL or a site-relative path in the first place, lands the visitor on your home page rather than an error — a short link’s whole job is to forward somebody, and a broken destination should still send them somewhere rather than nowhere. Note that the allow-list governs where a link is allowed to send a visitor, not who gets credited: the commission always belongs to the affiliate whose link row it is, whichever host the visitor ends up on.

An affiliate can only delete their own links — the delete call is scoped to affiliate ID as well as link ID, so a link row can’t be removed by anyone it doesn’t belong to, even by guessing an ID.

The leaderboard#

The leaderboard ranks affiliates by total earned commission — unpaid plus paid referrals, summed — highest first, over the affiliate’s entire history rather than a window. It’s one aggregate query, so it stays cheap regardless of how many referrals a programme has recorded. Each entry carries the affiliate’s referral count alongside their total, but the count isn’t what it’s sorted by. An affiliate with no display name shows as “Affiliate #12” rather than nothing.

Email#

Nine notification events cover the programme end to end — a new application (to you and, on manual review, to the applicant), an approval or rejection, a domain-request decision, a new commission, a settled payout, and a recurring performance summary — and every one is on by default and editable under Settings → Emails. Leaving a template blank keeps it on the plugin’s own default copy, so an unedited message keeps improving as the plugin does rather than freezing at whatever it said on the day you installed it.