ATX Digital Ticketing Connect
WordPress Ticketing plugin to connect with Laravel ticketing package for Filament
by ATX Digital · github.com/siko001/atx-ticket-event-wordpress · website
Install
The author publishes release zips, so WP-CLI can install straight from GitHub:
wp plugin install https://github.com/siko001/atx-ticket-event-wordpress/releases/download/v1.3.24/atx-digital-ticketing-connect.zipReadme
ATX Digital Ticketing Connect (WordPress)
WordPress companion plugin for atx-digital/ticketing. Laravel is the
source of truth — this plugin mirrors published events read-only, renders them with
shortcodes/blocks/theme templates, and proxies ticket purchases to the Laravel checkout
API (which responds with a Stripe Checkout URL).
The webhook payload and checkout contracts are documented in the Laravel package's ARCHITECTURE.md — that file is the single reference for both sides.
How it works
-
Sync in — Laravel POSTs signed JSON (
event.published|updated|cancelled|deleted) to/wp-json/atx-ticketing/v1/webhook.Rest\WebhookControllerverifies the HMAC (timestamp + body, 5-minute tolerance, constant-time compare) andSync\EventUpserterupserts theatx_eventpost, structured meta (_atx_event_id,_atx_starts_at,_atx_status,_atx_requires_attendee_details, …), the_atx_payloadJSON blob andatx_event_categoryterms — idempotently, keyed on the Laravel event id.Sync\MediaSideloaderdownloads the event's main image/video and gallery into the media library (deduplicated by source URL); aconnection.modeenvelope flips this site's test mode remotely. -
Display — shortcodes and two Gutenberg blocks share one PHP render path:
[atx_events]/ ATX Events block — a list of events. Options:scope(upcoming|past|all),category(slug),limit,orderby(date|title),order(ASC|DESC),layout(grid|carousel) andcolumns(1–4). The carousel is a dependency-free slider (assets/js/events-carousel.js).[atx_event id="…"]— a single event by Laravel event id.[atx_featured_event post_id="…" layout="banner|card"]/ ATX Featured event block — highlights one event (post id, or the next upcoming when0) with per-detail toggles (date/venue/description/button + button text).
The
/events/archive, category archives and single event permalinks also render through the plugin templates by default (Events → Settings → Display), so themes with minimal generic templates still show full event details; both toggles there — plugin templates and plugin styling — can be switched off. Templates ship intemplates/and can be overridden inyour-theme/atx-ticketing/. -
Checkout out — the vanilla-JS ticket form posts to
/wp-json/atx-ticketing/v1/checkout(REST-nonce protected);Frontend\CheckoutProxysanitises and forwards it server-side viawp_remote_postand the browser is redirected to the returned Stripe URL. When the event has named tickets (requires_attendee_details), the form renders a name (+ optional email) field per selected ticket and sends them along — Laravel validates server-side either way. -
Test mode — two-way synced flag: the Connection-tab checkbox notifies Laravel (signed
POST /api/ticketing/wp/mode); toggling it on the Laravel Connections screen arrives instantly as a webhook. While on: a warning notice across wp-admin and a striped TEST MODE banner on the buy form. -
Logs — Events → Settings → Logs: incoming webhooks, syncs, mode changes and checkout activity (capped ring buffer, clearable); the Laravel admin keeps its own copy under System → Logs.
Setup
- Activate the plugin.
- Events → Settings (tabbed screen):
- Connection — Laravel API base URL, webhook shared secret (with a
Generate button — generate, save, copy into the Laravel
.env), the ATX admin URL, and a Test connection button that verifies both reachability and the secret againstGET /api/ticketing/wp/ping. - Pages — checkout success/cancel pages, plus a Create default pages
button that creates an Events listing page (
[atx_events]) and the two checkout pages and selects them automatically. - Connection also holds the Test mode checkbox (synced with the ATX admin).
- Display — use the plugin's event templates and/or styling, or hand both to the theme.
- Tools — Sync now pulls every published event from
GET /api/ticketing/wp/events(first install / after downtime). - Logs — sync + checkout activity on this site.
- Connection — Laravel API base URL, webhook shared secret (with a
Generate button — generate, save, copy into the Laravel
- In the Laravel
.env:TICKETING_WP_WEBHOOK_URL=https://your-site.example/wp-json/atx-ticketing/v1/webhook TICKETING_WP_WEBHOOK_SECRET=<same secret as in WP settings> - Publish an event in Laravel, click Sync now in WP, or run
php artisan ticketing:push-eventson the Laravel side.
Updates (GitHub Releases)
The plugin self-updates from GitHub Releases via the vendored
Support\GitHubPluginUpdater (config in config/github-updater.php, currently
siko001/atx-ticket-event-wordpress). A Force update check link appears on the Plugins
screen. Releasing: push a vX.Y.Z tag (or run the Release WordPress Plugin
workflow) — .github/workflows/release-plugin.yml builds
atx-digital-ticketing-connect.zip with the version stamped into the plugin
header and attaches it to a GitHub Release. The Laravel package deliberately has
no updater — it is deployed with the app via Composer.
For developers — building custom displays
Build your own blocks, sliders or parallax layouts on the synced data without editing plugin files or synced posts:
// Full payload for one event (occurrences, ticket_types, speakers, sponsors,
// registration_questions, venue, image_url, gallery_urls, checkout_url, post_id…).
$event = atx_ticketing_get_event(); // current post, or pass a post/ID
// A custom loop (scope: upcoming|past|all, category slug, limit, orderby, order).
$q = atx_ticketing_get_events( [ 'scope' => 'past', 'limit' => 6 ] );
while ( $q->have_posts() ) { $q->the_post(); /* … */ }
wp_reset_postdata();
Filters & actions:
| Hook | Type | Use |
|---|---|---|
atx_ticketing_event_payload |
filter ($payload, $post_id) |
add/tweak event data |
atx_ticketing_before_single_event / _after_single_event |
action ($event, $post) |
inject markup around a single event (e.g. a parallax hero) |
atx_ticketing_before_events / _after_events |
action ($query, $scope) |
inject markup around a list |
For a custom Gutenberg block, register your own block and call
atx_ticketing_get_event() / atx_ticketing_get_events() in its
render_callback — the data shape is identical to what the built-in blocks use.
Structured meta (_atx_starts_at, _atx_starts_at_ts, _atx_last_ts,
_atx_venue_name, _atx_status, …) is also readable directly with
get_post_meta(). _atx_starts_at_ts is the representative date for sorting
(soonest upcoming, or the most recent past occurrence); _atx_last_ts is when
the event's final occurrence ends, which is how scope=upcoming|past splits the
list — an event stays "upcoming" until every one of its dates has passed.
Events and their categories are one-way mirrors: both are read-only in wp-admin (categories are viewable but not creatable/editable) — the ATX platform owns them and overwrites local changes on sync. After a plugin update the mirror re-derives its display data automatically, so no manual "Sync now" is needed.
Pausing (hibernation) & uninstalling
All event data — including past events, sponsors, speakers, locations, media
and categories — is stored locally in WordPress (the _atx_payload meta, post
meta, the media library and atx_event_category terms). Displaying events
never calls Laravel — only syncing new changes, testing the connection, and
ticket checkout do.
- Hibernation (pausing to save costs): keep the plugin active and simply switch off / stop paying for the Laravel backend. The site keeps showing every synced event from its local copy for as long as you like; when you bring Laravel back, run Tools → Sync now to catch up. (Note: while Laravel is down, new syncs and live ticket purchases won't work — display is unaffected.)
- Deactivating never deletes anything on its own. Clicking Deactivate on the Plugins screen opens a prompt with three choices: Deactivate only (keep the plugin installed and all data — ideal for hibernation), Deactivate and delete the plugin — keep data (removes the plugin files but keeps the mirrored events for a later reinstall), or Deactivate and delete the plugin — remove all data (a full wipe).
- Deleting an already-inactive plugin shows the two data choices (keep / remove all). Either entry point honours Settings → Tools → Data & uninstall, which defaults to Keep all data. No custom database tables are ever created, so nothing is orphaned whichever you choose.
- Removing the blocks is safe: the ATX blocks are server-rendered, so if the plugin is gone they simply render nothing rather than breaking the page. (Shortcodes, if you used any, would show as literal text — prefer the blocks.)
WP-CLI. wp plugin deactivate … never removes data. To delete the plugin and
choose what happens to the data from the command line, use the bundled command
(the CLI equivalent of the Plugins-screen prompt):
wp atx-ticketing uninstall # asks keep or delete, then removes the plugin
wp atx-ticketing uninstall --data=keep # remove plugin, keep events for a later reinstall
wp atx-ticketing uninstall --data=delete --yes # remove plugin AND all data (no prompt)
Development
composer install
composer lint # php-parallel-lint
composer phpcs # WordPress-Extra coding standards
No build step: the block uses ServerSideRender with plain-JS editor controls, the
frontend uses vanilla JS (no jQuery).
Releasing a new version
A GitHub Release (built automatically from a tag) is what installed sites see as an update.
# from this plugin's directory, after committing your changes:
git tag -a v1.1.1 -m "v1.1.1" # next semver: fix = patch, feature = minor, breaking = major
git push origin main --tags # pushes the branch AND the tag
# the "Release WordPress Plugin" workflow then builds the zip, stamps the
# version into the plugin header and publishes the GitHub Release.
# On any installed site: Plugins → "Force update check" → update.
Forgot which tags exist? git tag (local) / git ls-remote --tags origin (GitHub).
Tagged the wrong commit? git tag -d v1.1.1 && git push origin :refs/tags/v1.1.1, then re-tag.
Read the full README on GitHub →
Releases
| Tag | Published | Asset | Downloads |
|---|---|---|---|
| v1.3.24 | Jul 6, 2026 | atx-digital-ticketing-connect.zip | 1 |
| v1.3.23 | Jul 6, 2026 | atx-digital-ticketing-connect.zip | 1 |
| v1.3.22 | Jul 6, 2026 | atx-digital-ticketing-connect.zip | 0 |
| v1.3.21 | Jul 6, 2026 | atx-digital-ticketing-connect.zip | 1 |
| v1.3.20 | Jul 6, 2026 | atx-digital-ticketing-connect.zip | 1 |
| v1.3.19 | Jul 6, 2026 | atx-digital-ticketing-connect.zip | 2 |
| v1.3.18 | Jul 6, 2026 | atx-digital-ticketing-connect.zip | 3 |
| v1.3.17 | Jul 6, 2026 | atx-digital-ticketing-connect.zip | 1 |
| v1.3.16 | Jul 6, 2026 | atx-digital-ticketing-connect.zip | 2 |
| v1.3.15 | Jul 5, 2026 | atx-digital-ticketing-connect.zip | 2 |
| v1.3.14 | Jul 5, 2026 | atx-digital-ticketing-connect.zip | 2 |
| v1.3.13 | Jul 5, 2026 | atx-digital-ticketing-connect.zip | 2 |
| v1.3.12 | Jul 5, 2026 | atx-digital-ticketing-connect.zip | 1 |
| v1.3.11 | Jul 5, 2026 | atx-digital-ticketing-connect.zip | 3 |
| v1.3.10 | Jul 5, 2026 | atx-digital-ticketing-connect.zip | 1 |
| v1.3.9 | Jul 5, 2026 | atx-digital-ticketing-connect.zip | 1 |
| v1.3.8 | Jul 4, 2026 | atx-digital-ticketing-connect.zip | 1 |
| v1.3.6 | Jul 4, 2026 | atx-digital-ticketing-connect.zip | 0 |
| v1.3.7 | Jul 4, 2026 | atx-digital-ticketing-connect.zip | 1 |
| v1.3.5 | Jul 4, 2026 | atx-digital-ticketing-connect.zip | 1 |
| v1.3.4 | Jul 4, 2026 | atx-digital-ticketing-connect.zip | 0 |
| v1.3.0 | Jul 4, 2026 | atx-digital-ticketing-connect.zip | 0 |
| v1.3.1 | Jul 4, 2026 | atx-digital-ticketing-connect.zip | 1 |
| v1.2.0 | Jul 4, 2026 | atx-digital-ticketing-connect.zip | 0 |
| v1.2.1 | Jul 4, 2026 | atx-digital-ticketing-connect.zip | 0 |