Если вы используете Elementor Pro для создания форм на сайте под управлением WordPress, скорее всего, вы сталкивались с необходимостью добавить маску ввода телефона — чтобы пользователи не вводили номер в произвольном формате, а сразу видели шаблон: +7 (___) ___-__-__.
В этой статье мы покажем, как реализовать маску телефона без сторонних плагинов, без зависимости от внешних серверов и с поддержкой динамических форм (в попапах, модальных окнах).
🔧 Почему стандартные решения не всегда работают?
- Плагины для масок часто тяжёлые, конфликтуют с темой или Elementor.
- Подключение через сторонние ресурсы создаёт зависимость от внешнего ресурса (если внешний сервер упадёт — маска пропадёт).
- Формы в попапах появляются динамически — обычный скрипт их «не видит».
Наше решение:
- ✅ Использует лёгкую и популярную библиотеку Inputmask,
- ✅ Подключает её локально (сохраняется в папке с темой),
- ✅ Работает везде: на страницах и в попапах,
- ✅ Не требует правки шаблонов (только через сниппет),
- ✅ Полностью совместимо с Elementor Pro.
📁 Шаг 1. Подготовка: скачиваем библиотеку Inputmask
- Перейдите по ссылке:
👉 https://cdn.jsdelivr.net/npm/inputmask@5.0.8/dist/inputmask.min.js - Сохраните содержимое файла как
phone-mask.js. - Загрузите этот файл в папку вашей дочерней темы (обязательно!):
/wp-content/themes/ваша-дочерняя-тема/js/phone-mask.js
💡 Если у вас нет дочерней темы — создайте её! Это обязательно для безопасного обновления темы.
🧩 Шаг 2. Добавляем код через WP Code Snippets
Установите плагин WP Code Snippets (если ещё не установлен).
- Перейдите в Сниппеты → Добавить новый.
- Вставьте следующий код:
(function () {
function applyPhoneMask() {
const phoneInputs = document.querySelectorAll('input[name="form_fields[tel]"]');
if (phoneInputs.length === 0) return;
if (typeof Inputmask === 'undefined') {
const script = document.createElement('script');
// Подключаем ЛОКАЛЬНЫЙ файл из дочерней темы
script.src = '/wp-content/themes/hello/js/phone-mask.js';
script.onload = function () {
if (typeof Inputmask !== 'undefined') {
initMasks(phoneInputs);
} else {
console.error('Inputmask не инициализирована после загрузки скрипта');
}
};
script.onerror = function () {
console.error('Не удалось загрузить локальный файл phone-mask.js');
};
document.head.appendChild(script);
} else {
initMasks(phoneInputs);
}
}
function initMasks(inputs) {
inputs.forEach(input => {
if (input.inputmask) return;
new Inputmask({
mask: '+7 (999) 999-99-99',
placeholder: '+7 (___) ___-__-__',
showMaskOnHover: false,
showMaskOnFocus: true
}).mask(input);
});
}
const observer = new MutationObserver(applyPhoneMask);
observer.observe(document.body, {
childList: true,
subtree: true
});
if (document.readyState === 'loading') {
document.addEventListener('DOMContentLoaded', applyPhoneMask);
} else {
applyPhoneMask();
}
})();
- Важно! Замените в строке:
script.src = '/wp-content/themes/hello/js/phone-mask.js';
название вашей дочерней темы (hello) на реальное имя вашей темы.
- Назовите сниппет, например: «Маска телефона для Elementor».
- Установите тип: «Frontend» (только на сайте, не в админке).
- Нажмите Сохранить сниппет или «Save Changes and Activate».
🔍 Как это работает?
input[name="form_fields[tel]"]— стандартное имя поля телефона в формах Elementor Pro.- Скрипт автоматически подключает ваш локальный файл
phone-mask.js, если библиотека ещё не загружена. MutationObserverследит за изменениями на странице — как только появляется новая форма (например, в попапе), маска применяется мгновенно.- Проверка
if (input.inputmask)предотвращает дублирование маски.
🛠 Настройка под ваш формат
Хотите другой формат? Просто измените параметры в new Inputmask({ ... }):
mask: '+7 999 999-99-99',
placeholder: '+7 ___ ___-__-__',
Или для международного формата:
mask: '+375 (99) 999-99-99',
placeholder: '+375 (__) ___-__-__',
Библиотека Inputmask поддерживает любые шаблоны!
✅ Проверка работы
- Откройте страницу с формой Elementor.
- Кликните в поле телефона.
- Должна появиться маска:
+7 (___) ___-__-__. - Попробуйте открыть форму в попапе — маска тоже должна работать.
- Откройте DevTools (F12) → Console — убедитесь, что нет ошибок.
💡 Советы
- Если маска не появляется — проверьте точное имя поля в HTML. Иногда Elementor использует другие имена (например,
form_fields[phone]). В этом случае замените селектор в коде. - Чтобы обойти кэш при обновлении файла, добавьте версию в URL:
script.src = '/wp-content/themes/hello/js/phone-mask.js?v=1.1';
- Не используйте пробелы в путях и URL — это частая причина ошибок 404.
🎯 Заключение
Теперь у вас есть надёжная, быстрая и независимая от внешних ресурсов маска ввода телефона для всех форм Elementor Pro — даже в динамических попапах.
Вы не зависите от внешних сервисов, не нагружаете сайт лишними плагинами, и полностью контролируете поведение формы.
Удачи в разработке! 🚀
Протестировано на: WordPress 6.8.3 + Elementor Pro 3.32.2 + Hello Theme (дочерняя)
Библиотека: Inputmask v5.0.8 (лицензия MIT)




