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