Skip to main content

Third-Party Plugin Integrations

Burst Statistics v3.3.0 ships with built-in integrations for popular WordPress plugins. Each integration is loaded automatically when the corresponding plugin is detected. This document describes every supported integration, the goals each one provides, and how developers can register their own.


How integrations work

On plugins_loaded, Burst iterates the integrations registry and checks whether each plugin is active by testing a constant, function, or class name. When a match is found, Burst loads the corresponding integration file from includes/Integrations/plugins/. If the integration defines goals, those goals become available in the Goals UI.

Integration files are plain PHP files; no class is required. They hook into WordPress actions and filters to bridge the third-party plugin with Burst's own hooks.


Built-in integrations

Complianz GDPR/CCPA

Registers Burst's tracking script with Complianz's blocked-scripts list so that consent is correctly requested and honoured.

  • When the WP Consent API (wp_has_consent) is present, Complianz defers entirely to it and the script-blocking logic is skipped.
  • When cookieless tracking is enabled in Burst, the script is never blocked regardless of consent state.
  • Any existing burst entry added by Complianz itself is removed and replaced with Burst's own entry to avoid duplicates.

Script categories registered: statistics Script URLs matched: assets/js/build/burst.js, assets/js/build/burst.min.js


Page builders

Elementor Website Builder

Goals available:

Goal IDTypeTrigger
elementor_pro_forms_form_submittedhookelementor_pro/forms/form_submitted
submit_button_clickclicks.elementor-field-type-submit .elementor-button

eCommerce plugins

WooCommerce

Fires Burst's unified order and cart actions and resolves the checkout/products page IDs.

Goals available:

Goal IDTypeTrigger
woocommerce_add_to_carthookwoocommerce_add_to_cart
woocommerce_checkout_order_createdhookwoocommerce_checkout_order_created
woocommerce_payment_completehookwoocommerce_payment_complete
woocommerce_add_to_cart_clickclicks.add_to_cart_button
woocommerce_click_checkout_buttonclicks.wc-block-cart__submit-button

When an order is created (via the classic checkout or the Store API block checkout), Burst fires both burst_order_created and burst_woocommerce_order_created with a normalized data array. Cart changes (add, remove, restore, quantity update) fire burst_cart_updated.

WooCommerce Payments

Detected via WCPAY_PLUGIN_FILE. Requires WooCommerce to also be active. No additional goals; relies on WooCommerce's own order hooks.

Easy Digital Downloads

Fires Burst's unified order and cart actions and resolves the checkout/products page IDs. Stripe-gateway orders are handled via edds_order_complete instead of edd_complete_purchase to avoid double-counting.

Goals available:

Goal IDTypeTrigger
edd_complete_purchasehookedd_complete_purchase
edd_add_to_cartclicks.edd-add-to-cart
edd_go_to_checkoutclicks.edd_go_to_checkout
edd_click_purchaseclicks#edd-purchase-button

Easy Digital Downloads – Multi Currency

Detected via EDD_MULTI_CURRENCY_FILE. Requires Easy Digital Downloads to also be active. No additional goals.

Easy Digital Downloads – Recurring Payments

Goals available:

Goal IDTypeTrigger
edd_subscription_post_createhookedd_subscription_post_create
edd_subscription_cancelledhookedd_subscription_cancelled

Give – Donation Plugin

Goals available:

Goal IDTypeTrigger
give_click_donation_open_modalclicks.givewp-donation-form-modal__open
give_click_donationclicks.givewp-donation-form__steps-button-next
give_donation_hookhookgive_process_donation_after_validation

Contact form plugins

Contact Form 7

Goal IDTypeTrigger
wpcf7_submithookwpcf7_submit
wpcf7_submit_clickclicks.wpcf7-submit

WPForms

Goal IDTypeTrigger
wpforms_process_completehookwpforms_process_complete
wpforms_click_submitclicks.wpforms-submit

Fluent Forms

Goal IDTypeTrigger
fluentform_submission_insertedhookfluentform/submission_inserted
fluentforms_click_submitclicks.ff-btn-submit

Happyforms

Goal IDTypeTrigger
happyforms_submission_successhookhappyforms_submission_success

WS Form

Goal IDTypeTrigger
wsf_submithookwsf_submit

Gravity Forms

Goal IDTypeTrigger
gform_post_submissionhookgform_post_submission
gform_click_submitclicksinput[type="submit"].gform_button

Formidable Forms

Goal IDTypeTrigger
frm_submit_clickedclicks.frm_button_submit

Ninja Forms

Goal IDTypeTrigger
ninja_forms_after_submissionhookninja_forms_after_submission

Caching plugins

WP Rocket

Excludes Burst's inline JavaScript from WP Rocket's combine/minify pass and excludes timeme and burst JS files from minification. This prevents Burst's tracking code from being broken by asset optimization.

No goals are registered for this integration.


Database table schema

burst_sessions

Changed in v3.3.0: the following columns were moved from burst_statistics into burst_sessions and are now the authoritative source for per-session device and visitor attributes.

ColumnTypeDefaultDescription
browser_idint0Foreign key into burst_browsers.
browser_version_idint0Foreign key into browser versions lookup.
platform_idint0Foreign key into burst_platforms.
device_idint0Foreign key into burst_devices.
first_time_visittinyint01 if this is the visitor's first ever session.
bouncetinyint11 if the session contained only one pageview.

Indexes are created for browser_id, platform_id, device_id, first_time_visit, and bounce.

burst_statistics

Breaking change

In v3.3.0 the columns browser_id, browser_version_id, platform_id, device_id, first_time_visit, and bounce were removed from burst_statistics. The indexes on bounce and first_time_visit were also removed.

Any integration or custom query that reads or writes these columns on burst_statistics will fail silently or produce a database error after upgrading. Rewrite such queries to join burst_sessions on burst_statistics.session_id = burst_sessions.ID and read the columns from burst_sessions instead.

// Before v3.3.0 — broken after upgrade:
$wpdb->get_results(
"SELECT browser_id, device_id, first_time_visit, bounce
FROM {$wpdb->prefix}burst_statistics
WHERE time > %d",
$start
);

// v3.3.0 and later — correct:
$wpdb->get_results(
$wpdb->prepare(
"SELECT sess.browser_id, sess.device_id, sess.first_time_visit, sess.bounce
FROM {$wpdb->prefix}burst_statistics AS st
INNER JOIN {$wpdb->prefix}burst_sessions AS sess ON st.session_id = sess.ID
WHERE st.time > %d",
$start
)
);

The INSERT statement for new pageviews no longer includes first_time_visit, bounce, browser_id, browser_version_id, platform_id, or device_id. These values are written exclusively to burst_sessions at session-creation time.

Archive / restore (Burst Pro)

Pro

The archive export (Archive_Pro) now joins burst_sessions when building the CSV so that the session-level columns (browser_id, browser_version_id, platform_id, device_id, first_time_visit, bounce, referrer) are preserved alongside each statistics row.

On restore, those session columns are split out from the CSV and applied to the corresponding burst_sessions row via UPDATE. If the session row no longer exists it is re-created via INSERT. Custom restore logic that previously read these columns from the statistics portion of the CSV must be updated to read them from the session portion. Learn more about data management


Filters and actions reference

burst_integrations

Filters the complete integrations registry before Burst processes it. Use this to add, remove, or modify integrations.

Parameters:

ParameterTypeDescription
$integrationsarray<string, array>Associative array of integrations keyed by plugin slug.

Example:

add_filter( 'burst_integrations', function( array $integrations ): array {
$integrations['my-plugin'] = [
'constant_or_function' => 'MY_PLUGIN_VERSION',
'label' => 'My Plugin',
'goals' => [
[
'id' => 'my_form_submitted',
'type' => 'hook',
'hook' => 'my_plugin_form_submitted',
],
],
];
return $integrations;
} );

burst_integration_path

Filters the file path Burst resolves for an integration before requiring it. Useful when shipping an integration file in your own plugin.

Parameters:

ParameterTypeDescription
$pathstringAbsolute path to the integration PHP file.
$pluginstringThe plugin slug being loaded.

Example:

add_filter( 'burst_integration_path', function( string $path, string $plugin ): string {
if ( 'my-plugin' === $plugin ) {
return plugin_dir_path( __FILE__ ) . 'integrations/burst-my-plugin.php';
}
return $path;
}, 10, 2 );

burst_load_ecommerce_integration

Filters whether Burst should activate its eCommerce feature set. By default this returns true when any integration that has load_ecommerce_integration => true is active.

Parameters:

ParameterTypeDescription
$should_loadbooltrue to enable eCommerce features, false to disable.

Example:

add_filter( 'burst_load_ecommerce_integration', '__return_true' );

burst_checkout_page_id

Filters the page ID Burst treats as the checkout page. WooCommerce and EDD both hook into this to return their configured checkout page.

Parameters:

ParameterTypeDescription
$page_idintThe current checkout page ID.

Example:

add_filter( 'burst_checkout_page_id', function( int $page_id ): int {
return (int) get_option( 'my_plugin_checkout_page_id', $page_id );
} );

burst_products_page_id

Filters the page ID Burst treats as the main products/shop page. WooCommerce and EDD both hook into this to return their configured shop page.

Parameters:

ParameterTypeDescription
$page_idintThe current products page ID.

Example:

add_filter( 'burst_products_page_id', function( int $page_id ): int {
return (int) get_option( 'my_plugin_shop_page_id', $page_id );
} );

burst_base_currency

Filters the store's base currency code. WooCommerce returns get_woocommerce_currency(); EDD returns edd_get_currency(). Both also invalidate a burst_base_currency transient when their currency option changes.

Parameters:

ParameterTypeDescription
$currencystringISO 4217 currency code, e.g. 'USD'.

Example:

add_filter( 'burst_base_currency', function( string $currency ): string {
return 'EUR';
} );

burst_woocommerce_order_data

Filters the normalized order data array before Burst fires burst_order_created for a WooCommerce order.

Parameters:

ParameterTypeDescription
$dataarrayNormalized order data (see structure below).
$orderWC_OrderThe WooCommerce order object.

$data structure:

KeyTypeDescription
currencystringISO 4217 currency code.
totalfloatOrder subtotal before tax.
taxfloatTotal tax amount.
platformstringAlways 'WC'.
productsarrayArray of {product_id, amount, price} entries.

Example:

add_filter( 'burst_woocommerce_order_data', function( array $data, WC_Order $order ): array {
$data['custom_field'] = $order->get_meta( '_my_field' );
return $data;
}, 10, 2 );

burst_edd_order_data

Filters the normalized order data array before Burst fires burst_order_created for an Easy Digital Downloads order.

Parameters:

ParameterTypeDescription
$dataarrayNormalized order data (see structure below).
$order_idintThe EDD payment/order ID.
$paymentEDD_PaymentThe EDD payment object.

$data structure:

KeyTypeDescription
currencystringISO 4217 currency code.
totalfloatOrder subtotal before tax.
taxfloatTotal tax amount.
platformstringAlways 'EDD'.
productsarrayArray of {product_id, amount, price} entries.

Example:

add_filter( 'burst_edd_order_data', function( array $data, int $order_id, EDD_Payment $payment ): array {
$data['license_key'] = get_post_meta( $order_id, '_license_key', true );
return $data;
}, 10, 3 );

burst_order_created (action)

Fired whenever any supported eCommerce plugin creates a completed order. Both WooCommerce and EDD fire this action with the same normalized structure, making it platform-agnostic.

Parameters:

ParameterTypeDescription
$dataarrayNormalized order data. See burst_woocommerce_order_data / burst_edd_order_data for the full structure.

Example:

add_action( 'burst_order_created', function( array $data ): void {
// $data['platform'] is 'WC' or 'EDD'.
error_log( 'Order created. Total: ' . $data['total'] . ' ' . $data['currency'] );
} );

burst_woocommerce_order_created (action)

Fired specifically when a WooCommerce order is created, in addition to burst_order_created. Provides the same $data array.

Parameters:

ParameterTypeDescription
$dataarrayNormalized WooCommerce order data.

Example:

add_action( 'burst_woocommerce_order_created', function( array $data ): void {
// WooCommerce-specific handling.
} );

burst_edd_order_created (action)

Fired specifically when an Easy Digital Downloads order is created, in addition to burst_order_created. Provides the same $data array.

Parameters:

ParameterTypeDescription
$dataarrayNormalized EDD order data.

Example:

add_action( 'burst_edd_order_created', function( array $data ): void {
// EDD-specific handling.
} );

burst_cart_updated (action)

Fired when the cart changes in any supported eCommerce plugin (item added, removed, restored, or quantity updated). Both WooCommerce and EDD fire this action.

Parameters:

ParameterTypeDescription
$dataarrayCart data containing an items key.

$data['items'] entries:

KeyTypeDescription
product_idintProduct or download ID.
quantityintCurrent quantity in cart.
pricefloatUnit price excluding tax.
added_atstringMySQL timestamp of when the item was added (EDD only).

Example:

add_action( 'burst_cart_updated', function( array $data ): void {
foreach ( $data['items'] as $item ) {
error_log( 'Cart item: product #' . $item['product_id'] . ' qty ' . $item['quantity'] );
}
} );

Adding a custom integration

Step 1 — Register the integration

Use the burst_integrations filter to add your plugin to the registry.

add_filter( 'burst_integrations', function( array $integrations ): array {
$integrations['my-crm'] = [
// Required. A constant, function, or class name that indicates the plugin is active.
'constant_or_function' => 'MY_CRM_VERSION',

// Required. Human-readable label shown in the Burst UI.
'label' => 'My CRM Plugin',

// Optional. Set true to load this integration on admin requests only.
'admin_only' => false,

// Optional. Load Burst's eCommerce feature set when this integration is active.
'load_ecommerce_integration' => false,

// Optional. Other integration slugs that must also be active.
'required_plugins' => [],

// Optional. Goals this integration contributes.
'goals' => [
[
// Unique goal identifier.
'id' => 'my_crm_form_submitted',
// 'hook' goals fire when a WordPress action fires server-side.
'type' => 'hook',
'hook' => 'my_crm_form_submitted',
],
[
'id' => 'my_crm_submit_click',
// 'clicks' goals fire when the user clicks a matching DOM element.
'type' => 'clicks',
'selector' => '.my-crm-submit',
],
],
];

return $integrations;
} );

Step 2 — Provide an integration file (optional)

If your integration needs to run custom PHP (e.g. to hook into server-side events), provide a file and point Burst to it with burst_integration_path:

add_filter( 'burst_integration_path', function( string $path, string $plugin ): string {
if ( 'my-crm' === $plugin ) {
return plugin_dir_path( __FILE__ ) . 'burst-integration.php';
}
return $path;
}, 10, 2 );

The file is included with require_once on plugins_loaded when the plugin is detected as active. No class structure is required — add your hooks directly.

Integration registry schema

KeyTypeRequiredDescription
constant_or_functionstringYesConstant name, function name, or class name used to detect whether the plugin is active.
labelstringYesDisplay label shown in the Burst dashboard.
admin_onlyboolNoWhen true, the integration file is loaded only for users with admin access. Default false.
load_ecommerce_integrationboolNoWhen true and the plugin is active, Burst's eCommerce feature set is enabled. Default false.
required_pluginsstring[]NoIntegration slugs (keys in the registry) that must also be active for this integration to load.
goalsarrayNoGoals made available in the Goals UI. See goal schema below.

Goal schema

KeyTypeRequiredDescription
idstringYesUnique identifier for the goal.
typestringYesEither 'hook' (server-side WordPress action) or 'clicks' (client-side DOM click).
hookstringYes (hook type)The WordPress action hook name to listen on.
selectorstringYes (clicks type)CSS selector for the element whose clicks trigger the goal.
caution

Goals must be triggerable by the site visitor (i.e. they must fire during a normal page request or user interaction). Goals that fire only during background processes or WP-CLI commands cannot be attributed to a visitor session and will not be recorded.


Burst registers itself with the WP Consent API on plugins_loaded via the wp_consent_api_registered_{plugin} filter. When the WP Consent API is present, all consent routing is handled by it and plugin-specific consent bridges (e.g. the Complianz script-blocking logic) are bypassed automatically.