Nine things that should already exist.
Features most plugins paywall or ship broken — all free, forever.
Drop-in Tel field
No new widget. Just toggle Country Code → Show on any Tel field and the dropdown, flag and formatting appear.
COREAuto-localised errors
Validation strings are translatable via WPML, Polylang, Loco Translate, or a .po/.mo file you drop in /languages/.
I18NCache-plugin safe flags
Inline per-country SVGs. WP-Rocket Remove-Unused-CSS and LiteSpeed minifier can't strip them, so every flag stays itself.
PERFORMANCENo duplicate submissions
We never call handleSubmit or setTimeout. The input stays in E.164 and Elementor's native submit handler runs untouched.
RELIABILITYSafe pre-fill
If the field is pre-populated with an E.164 value from cookie, autofill or URL param, we never duplicate the dial code.
COMPATAuto-detect visitor country
Uses the browser's navigator.language — no external IP lookup, no GDPR surface, no latency on render.
UXintl-tel-input v27.1.2
Latest upstream library, bundled and licence-clean. No CDN fetch, no build step, no surprises in production.
BUNDLEDMulti-step compatible
Works seamlessly inside Elementor's multi-step forms. Step navigation and validation flow through unchanged.
MULTI-STEPServer-side validation
Hooks elementor_pro/forms/validation/tel to enforce digit count and length bounds before the submission is stored.
SERVER-SIDEFour steps, no configuration file.
Install & activate
Upload via Plugins → Add New, or drop the zip into wp-content/plugins/. Activate.
Open any Form widget
Edit a page in Elementor, drop the Form widget or open an existing one.
Add a Tel field
Add a Tel field to the form. No special widget — just the built-in type.
Toggle Country Code
In the field settings, flip Country Code → Show. That's it. Publish.
Filters, hooks, and no JavaScript magic.
Every string, every validation rule, every locale resolution is filterable. The JS is a thin shim over intl-tel-input — no monkey-patching Elementor internals.
// Translate a single error message add_filter('pfcc/error_messages', function( $msgs ) { $msgs[2] = 'Zu kurz.'; return $msgs; }); // Bias the list toward EU customers add_filter('pfcc/preferred_countries', fn() => [ 'DE', 'FR', 'ES', 'IT', 'NL' ]); // Tighten server-side validation add_action('elementor_pro/forms/validation/tel', function( $field, $record, $ajax ) { if ( strlen( $field['value'] ) < 10 ) { $ajax->add_error( $field['id'], 'Too short' ); } }, 10, 3 );
Questions, answered.
Drop it on your form.
Forget it's there.
Free forever on WordPress.org. Installed in under two minutes. No premium version, no upsells.