Pass
Milo Pass turns every subscription into a scannable QR member pass, verified live at the door.
Requirements
- Milo Subscriptions (free core)
- A valid license key (Milo Subscriptions > Settings > Licenses)
Setup
Nothing to configure: once activated, every subscriber sees their pass on the My Account subscription page. Optionally:
- Settings > General > Pass: toggle the My Account section, accept paused (on-hold) subscriptions at the door, set the venue name printed on passes.
- Place the pass anywhere with the
[milo_pass]shortcode or the Milo Pass block. Both render the same card. Attributes/options:title(card title),empty_text(message for logged-in visitors without a subscription),subscription(a specific subscription id, shortcode only).
Scanning at the door
Staff scan the QR with any phone camera; it opens a full-screen page:
- Green “ACCESS GRANTED”: the subscription is currently active (or pending cancellation, or on-hold if you allow it), with the member’s name and plan.
- Red “ACCESS DENIED”: cancelled/expired subscription or invalid pass, with the reason.
The verdict is computed at scan time from the live subscription status. No caching, no stale passes.
Check-in history
Milo Subscriptions > Pass lists every scan: member, subscription, granted/denied, timestamp (UTC), with filters and search. Use it for attendance, busy-hour analysis, or spotting denied attempts.
Security notes
- Pass tokens are HMAC-signed with your site’s auth salt; they cannot be guessed or forged, and there is nothing to store or expire.
- The door page reveals nothing for invalid tokens, and only name/plan/status for valid ones.
- Rotating your WordPress salts invalidates every pass at once (customers just reload their My Account page for the new QR).
For developers
milo_pass_valid_statusesfilters which statuses open the door.milo_pass_checkin_recorded( $subscription_id, $result )fires on every scan (trigger a webhook, a Slack ping, a turnstile relay).
Did this page miss something?
Tell us and we rewrite it, usually the same day.