Capture once. Decide later.
SignalPress lets you capture events anywhere in your WordPress code, then route them to one or many destinations without changing your application.
Every event passes through a fast asynchronous queue where routing rules decide exactly where it goes. Send checkout events to Slack, errors to Better Stack, analytics to PostHog, or fan out to multiple services simultaneously.
As your workflow evolves, update your routing—not your code.
// Send a basic event
sp_capture('checkout_completed',
[
'order_id' => 123,
'total' => 49.95,
]
);
// WooCommerce order completed hook.
add_action( 'woocommerce_order_status_completed', function ( $order_id ) {
$order = wc_get_order( $order_id );
if ( ! $order ) {
return;
}
sp_capture(
'checkout_completed',
[
'order_id' => $order->get_id(),
'total' => $order->get_total(),
'currency' => $order->get_currency(),
],
[
'source' => 'woocommerce',
'distinct_id' => (string) $order->get_customer_id(),
'services' => [ 'slack', 'posthog', 'email' ]
]
);
} );
// Capture custom application data
sp_capture(
'subscription_upgraded',
[
'user_id' => 42,
'plan' => 'pro',
'previous' => 'plus',
'price' => 149.00,
'billing' => 'annual',
'coupon' => 'SUMMER25',
'upgraded_at' => current_time( 'mysql' ),
],
[
'source' => 'membership',
'distinct_id' => 'user-42',
'services' => [ 'datadog', 'teams', 'local' ],
]
);
// Your first event
SignalPress.capture('checkout_completed',
{
'order_id': 123,
'total': 49.95,
}
);
// Capture a CTA button click
document.querySelector('#get-started').addEventListener('click', function () {
SignalPress.capture(
'cta_clicked',
{
level: 'info',
button: 'get-started',
page: window.location.pathname,
},
{
source: 'marketing-site',
}
);
});
// Send a custom application payload
SignalPress.capture(
'demo_form_submitted',
{
level: 'info',
plan: 'pro',
team_size: 12,
features: [ 'slack', 'routing', 'queue' ],
referrer: document.referrer || 'direct',
},
{
source: 'signup-form',
distinct_id: 'visitor-abc123',
services: [ 'slack', 'posthog', 'email' ],
}
);
Every event passes through a durable delivery queue for reliable, asynchronous processing.
Review internal events, warnings, and diagnostics to quickly troubleshoot issues.