__( 'Unauthorized.', 'forge-trueconversion' ) ), 403 ); } $step = isset( $_POST['step'] ) ? absint( $_POST['step'] ) : 0; switch ( $step ) { case 2: // Form Detection $enabled_forms = isset( $_POST['ftcon_enabled_forms'] ) ? array_map( 'sanitize_text_field', wp_unslash( (array) $_POST['ftcon_enabled_forms'] ) ) : array(); update_option( 'ftcon_enabled_forms', $enabled_forms ); update_option( 'ftcon_wizard_current_step', $step + 1 ); break; case 3: // Settings $email = isset( $_POST['ftcon_notification_email'] ) ? sanitize_email( wp_unslash( $_POST['ftcon_notification_email'] ) ) : get_option( 'admin_email' ); update_option( 'ftcon_notification_email', $email ); $allowed_freqs = array_keys( FTCON_Admin_Settings::get_email_frequency_options() ); $email_freq = isset( $_POST['ftcon_email_frequency'] ) ? array_values( array_intersect( array_map( 'sanitize_text_field', wp_unslash( (array) $_POST['ftcon_email_frequency'] ) ), $allowed_freqs ) ) : array( 'each' ); update_option( 'ftcon_email_frequency', $email_freq ); update_option( 'ftcon_wizard_current_step', $step + 1 ); break; default: // Steps 1, 4, 5 — no fields to save, just advance. update_option( 'ftcon_wizard_current_step', $step + 1 ); break; } wp_send_json_success( array( 'message' => sprintf( /* translators: %d: step number */ __( 'Step %d saved.', 'forge-trueconversion' ), $step ), 'step' => $step, ) ); } /** * Render the Wizard Page */ public static function render_page() { if ( ! current_user_can( 'manage_options' ) ) { wp_die( esc_html__( 'You do not have permission to access this page.', 'forge-trueconversion' ) ); } $current_step = (int) get_option( 'ftcon_wizard_current_step', 1 ); $notification_email = get_option( 'ftcon_notification_email', get_option( 'admin_email' ) ); $enabled_forms = get_option( 'ftcon_enabled_forms', array() ); $installed_plugins = FTCON_Form_Integrations::detect_installed_plugins(); $all_plugins = FTCON_Form_Integrations::get_supported_plugins(); $installed_slugs = array_column( $installed_plugins, 'slug' ); ?>

real commercial enquiries back to Google Ads as conversions.', 'forge-trueconversion' ), array( 'strong' => array() ) ); ?>

  • Captures traffic source data from ad clicks (Google Ads, Meta Ads, LinkedIn, etc.)', 'forge-trueconversion' ), array( 'strong' => array() ) ); ?>
  • Persists the data even if the visitor navigates to other pages before filling out a form', 'forge-trueconversion' ), array( 'strong' => array() ) ); ?>
  • Automatically appends the traffic source to form submissions', 'forge-trueconversion' ), array( 'strong' => array() ) ); ?>
  • Lets you mark real conversions and send them back to Google Ads so it optimises for actual customers', 'forge-trueconversion' ), array( 'strong' => array() ) ); ?>
  • Shows a dashboard of all entries so you can see which ads are working', 'forge-trueconversion' ), array( 'strong' => array() ) ); ?>

No coding required. The plugin works automatically with your existing forms. Let\'s set it up.', 'forge-trueconversion' ), array( 'strong' => array() ) ); ?>

Don\'t see your form plugin? You can use the %s shortcode inside any custom form to add hidden UTM fields.', 'forge-trueconversion' ), '[ftcon_fields]' ), array( 'strong' => array(), 'code' => array(), ) ); ?>

set this up later from the Google Ads settings page).', 'forge-trueconversion' ), array( 'strong' => array() ) ); ?>

' . esc_html__( 'TrueConversion > Google Ads', 'forge-trueconversion' ) . '' ), array( 'a' => array( 'href' => array() ) ) ); ?>

set this up later from the LinkedIn Ads settings page).', 'forge-trueconversion' ), array( 'strong' => array() ) ); ?>

' . esc_html__( 'TrueConversion > LinkedIn Ads', 'forge-trueconversion' ) . '' ), array( 'a' => array( 'href' => array() ) ) ); ?>


✓ ✓
✓ ✓
✓ ✓
✓ ✓
✓ ✓
✓ ✓
✗ ✓
✗ ✓

"Finish Setup" to continue with the Free plan.', 'forge-trueconversion' ), array( 'strong' => array() ) ); ?>