Docs External Forms Customization Examples

Customization Examples

Practical code examples for extending and integrating with the External Forms addon. Add these to your theme’s functions.php or a custom plugin.

Send New Registrations to a CRM

add_action('td_external_forms_registration_success', function($user_id, $user_data, $mapping) {
    if ($mapping['form_id'] != 5) return; // Only for a specific form

    wp_remote_post('https://api.example.com/contacts', [
        'body'    => json_encode([
            'email'      => $user_data['email'],
            'first_name' => $user_data['first_name'] ?? '',
            'last_name'  => $user_data['last_name'] ?? '',
            'company'    => $user_data['company'] ?? '',
            'source'     => 'tooldocs_form_' . $mapping['form_id'],
        ]),
        'headers' => ['Content-Type' => 'application/json', 'Authorization' => 'Bearer ' . MY_CRM_API_KEY],
    ]);
}, 10, 3);

Notify Slack on Whitelist Requests

add_action('td_external_forms_whitelist_request', function($user_id, $user_data, $mapping) {
    $message = sprintf(
        "New whitelist request from %s %s (%s) for document %s",
        $user_data['first_name'] ?? '',
        $user_data['last_name'] ?? '',
        $user_data['email'],
        $user_data['hash'] ?? 'unknown'
    );

    wp_remote_post('https://hooks.slack.com/services/YOUR/WEBHOOK/URL', [
        'body'    => wp_json_encode(['text' => $message]),
        'headers' => ['Content-Type' => 'application/json'],
    ]);
}, 10, 3);

Add Custom User Meta After Registration

add_action('td_external_forms_registration_success', function($user_id, $user_data, $mapping) {
    update_user_meta($user_id, 'registration_source', 'external_form');
    update_user_meta($user_id, 'registration_form_id', $mapping['form_id']);

    if (!empty($user_data['company'])) {
        update_user_meta($user_id, 'company', $user_data['company']);
    }
}, 10, 3);

Custom Confirmation for Specific Forms

add_filter('td_external_forms_override_confirmation', function($override, $confirmation, $form, $entry, $mapping) {
    if ($mapping['tooldocs_form_type'] === 'whitelist_registration') {
        return '<div style="padding: 20px; text-align: center;">
            <h2>Access Request Submitted</h2>
            <p>You will receive an email when access is granted.</p>
        </div>';
    }
    return $override;
}, 10, 5);

Redirect Registrations to a Welcome Page

add_filter('td_external_forms_override_confirmation', function($override, $confirmation, $form, $entry, $mapping) {
    if ($mapping['tooldocs_form_type'] !== 'document_registration') return $override;

    $first_name = rgar($entry, $mapping['field_map']['first_name'] ?? '');
    $url = add_query_arg('name', urlencode($first_name), home_url('/welcome/'));

    return ['redirect' => $url];
}, 10, 5);

Log All Submissions for Auditing

add_action('tooldocs_form_after_submission', function($user_data) {
    $type = 'unknown';
    if (!empty($user_data['registration'])) $type = 'registration';
    elseif (!empty($user_data['whitelist_request'])) $type = 'whitelist_request';

    error_log(sprintf(
        '[ToolDocs Audit] %s: %s (%s)',
        $type,
        $user_data['email'],
        current_time('mysql')
    ));
});

Track Form Conversions in External Analytics

add_action('tooldocs_form_submission_tracked', function($tracking_data, $adapter, $conversion_id) {
    global $wpdb;
    $wpdb->insert($wpdb->prefix . 'my_analytics_events', [
        'event_type'    => 'form_submission',
        'form_id'       => $tracking_data['form_id'],
        'form_title'    => $tracking_data['form_title'],
        'session_id'    => $tracking_data['session_id'],
        'conversion_id' => $conversion_id,
        'created_at'    => current_time('mysql'),
    ]);
}, 10, 3);

Conditionally Disable Auto-Login

Auto-login is a global setting, but you can prevent it for specific cases by logging the user out immediately after registration.

add_action('td_external_forms_registration_success', function($user_id, $user_data, $mapping) {
    // Don't auto-login whitelist registrations
    if ($mapping['tooldocs_form_type'] === 'whitelist_registration') {
        if (isset($_COOKIE['td_auth'])) {
            setcookie('td_auth', '', time() - 3600, '/');
        }
        if (is_user_logged_in()) {
            wp_logout();
        }
    }
}, 20, 3); // Priority 20 to run after auto-login

Related Articles

Was this article helpful?