Realtime WordPress events.
Zero polling.
Push WordPress events — post updates, comment counts, order status changes — to browsers instantly via WebSocket. One PHP call. No infrastructure to manage.
How it works
Three steps from installation to live events in the browser.
Install the plugin
Upload the WPSignal WordPress plugin. Click "Connect to WPSignal" in the settings page — your site registers automatically and credentials are saved.
Events fire automatically
The plugin publishes post.updated events on every
save. Register custom triggers with one line of PHP for any WordPress action.
Browser receives events
Logged-in users get a WebSocket connection (SSE fallback). Every event fires a native
CustomEvent on
document — no framework required.
Built for WordPress developers
WebSocket-first
Persistent WebSocket connections with Server-Sent Events as automatic fallback. Keepalive pings every 20 seconds.
HMAC-signed publishes
Every event is signed with SHA-256 HMAC. Timestamp replay protection and per-site rate limiting built in.
Fluent trigger API
Attach events to any WordPress action hook with a builder — channel, payload, condition — all in one call.
Cross-origin ready
CORS-enabled for SSE connections. Works from any domain without proxy configuration.
Multi-site support
Each WordPress site gets its own site_key and publish secret. Tenant isolation is enforced at the channel level.
Kitchen Sink demo
Built-in admin page showing connection status, live event log, publish form, and token inspector for instant debugging.
One line of PHP.
Live in the browser.
Register custom triggers on any WordPress action hook using the fluent builder API. Add a condition, custom channel, or transform the payload — all optional.
The browser client auto-connects and dispatches native
CustomEvents —
listen with plain JavaScript or integrate with any frontend framework.
add_action('wpsignal_loaded', function () {
// Publish when a WooCommerce order status changes
WPSignal::trigger('order.status_changed')
->on('woocommerce_order_status_changed', 10, 3)
->channel('events')
->data(function ($order_id, $old_status, $new_status) {
return [
'order_id' => $order_id,
'old_status' => $old_status,
'new_status' => $new_status,
];
})
->register();
});
document.addEventListener('wpsignal:order.status_changed', (e) => {
const { order_id, new_status } = e.detail.data;
updateOrderUI(order_id, new_status);
}); Ready to go realtime?
Free during beta. No credit card required. Sign up, connect your site, and push your first event in minutes.