AFI AFI

Hustle

Estimated reading: 3 minutes Updated August 1, 2026

Hustle from WPMU DEV builds popups, slide-ins, embeds, and social share bars, with its own local subscriber list. Advanced Form Integration captures optin submissions and routes the data to any of 200+ destinations.

What you’ll need

  • The Hustle plugin installed and activated.
  • At least one popup, slide-in, or embed module published with an optin form.
  • The Advanced Form Integration plugin installed and activated.

When the trigger fires

AFI registers a single Optin/Popup Form Submitted (site-wide) trigger for Hustle. It fires when a visitor submits any Hustle optin and the entry is confirmed saved.

Data captured

Field Field key Format
Module ID module_id Numeric ID
Email email Email address
All Submitted Fields all_fields_json JSON object serialised as a string, jSON, for fields not listed above

Create the integration

  1. Go to WP Admin → AFI → Add New.
  2. Enter an Integration Title, e.g. Hustle: Optin/Popup Form Submitted → Mailchimp.
  3. In Trigger → Form/Data Provider, select Hustle.
  4. In Form/Task Name, choose Optin/Popup Form Submitted (site-wide).
  5. In Action → Platform, pick the destination and complete the field mapping.
  6. Optional: configure Conditional Logic so only matching events are sent.
  7. Click Save Integration.

Screenshot: AFI Add New screen with Hustle selected as the Form/Data Provider

How AFI listens for optins

AFI hooks hustle_form_submit_before_set_fields from inc/front/hustle-module-front-ajax.php. It sits inside the if ( $user_exists || $entry->save() ) branch, so it only runs once the entry is confirmed saved to Hustle’s local list. AFI deliberately avoids the sibling hustle_form_after_handle_submit hook, which fires unconditionally before the success check and would dispatch failed submissions too. Registration is guarded by class_exists( 'Hustle_Module_Model' ).

One trigger for the whole site

Hustle modules are not exposed through an enumerable public forms API, so AFI registers a single site-wide trigger rather than a per-module picker. Module ID is a mappable field, so use Conditional Logic on it when you want different popups to reach different destinations.

Mapping custom fields

Beyond the email address, Hustle lets you add arbitrary fields per module. Everything submitted arrives in All Submitted Fields (JSON) as a name-to-value object. Map that whole payload into a text column, or parse it at the destination if it supports JSON.

Troubleshooting

Submissions reach Hustle but not the destination

Confirm the module actually saves to the local list. If Hustle is configured to forward straight to a third-party service without storing locally, the entry save that AFI depends on never happens.

Every popup lands in the same place

That is the default with a single site-wide trigger. Add Conditional Logic on Module ID to split them. The ID is visible in the URL when you edit a module in Hustle → Popups.

Related docs