Как автоматически подставить номер телефона из FluentBooking в WooCommerce
Клиентам надоело дважды вводить телефон при записи? Узнайте, как настроить автозаполнение номера из FluentBooking в WooCommerce и сделать воронку идеальной
При использовании FluentBooking вместе с WooCommerce клиент сначала записывается на консультацию, а затем переходит на страницу оплаты. Имя и электронная почта обычно заполняются автоматически, но номер телефона может оставаться пустым. В результате клиенту приходится вводить один и тот же номер дважды. Рассмотрим, почему это происходит и как автоматически подставить телефон в WooCommerce.
Почему телефон не передаётся
В FluentBooking имя и email являются системными полями. Плагин автоматически связывает их со стандартными полями WooCommerce:
- имя —
billing_first_name; - email —
billing_email.
Поле телефона во FluentBooking является дополнительным вопросом формы. Даже если для него выбран тип Phone, оно не всегда связывается со стандартным полем WooCommerce: Поэтому номер сохраняется в бронировании FluentBooking, но не появляется на странице оплаты.
Как решить проблему
Можно добавить небольшой сниппет, который:
- Получает номер из формы FluentBooking.
- Временно сохраняет его в браузере.
- После перехода на страницу оплаты находит поле телефона WooCommerce.
- Автоматически подставляет сохранённый номер.
- Передаёт его дальше платёжному модулю, например Продамус.
Настройка телефонного поля
Откройте:
FluentBooking → Календари → Нужная услуга → Настройки вопросов Добавьте обязательное поле типа Phone с названием:
Телефон Если услуг несколько, настройте это поле отдельно в каждой услуге.
Добавление сниппета в WPCodeBox2
Создайте новый PHP-сниппет в WPCodeBox2. Не добавляйте теги:
<?php и:
?> Вставьте следующий код:
add_action( 'wp_enqueue_scripts', function () {
if (
! is_page( 'sample-page' ) &&
! is_page( 'oformlenie-zakaza' )
) {
return;
}
wp_enqueue_script( 'jquery' );
$script = <<<'JAVASCRIPT'
(function () {
'use strict';
const storageKey = 'fluent_booking_phone';
function getFluentPhoneField() {
const fields = document.querySelectorAll('input[type="tel"]');
for (const field of fields) {
if (
field.offsetParent !== null &&
field.closest('.fcal_form_item')
) {
return field;
}
}
return null;
}
function savePhone() {
const field = getFluentPhoneField();
if (!field || !field.value.trim()) {
return;
}
let phone = field.value.trim();
const container = field.closest('.fcal_form_item');
if (container && !phone.startsWith('+')) {
const code = container.textContent.match(/\+\d{1,4}/);
if (code) {
phone = code[0] + ' ' + phone;
}
}
localStorage.setItem(storageKey, phone);
}
function fillWooCommercePhone() {
const phone = localStorage.getItem(storageKey);
if (!phone) {
return;
}
const checkoutField = document.querySelector(
'#billing_phone, input[name="billing_phone"]'
);
if (!checkoutField || checkoutField.value.trim()) {
return;
}
checkoutField.value = phone;
checkoutField.dispatchEvent(
new Event('input', { bubbles: true })
);
checkoutField.dispatchEvent(
new Event('change', { bubbles: true })
);
if (window.jQuery) {
window.jQuery(checkoutField)
.val(phone)
.trigger('input')
.trigger('change');
}
}
document.addEventListener('input', function (event) {
if (event.target.matches('input[type="tel"]')) {
savePhone();
}
}, true);
document.addEventListener('change', function (event) {
if (
event.target.matches('input[type="tel"]') ||
event.target.closest('.fcal_form_item')
) {
savePhone();
}
}, true);
document.addEventListener('click', function (event) {
const button = event.target.closest('button');
if (!button) {
return;
}
const text = button.textContent.trim().toLowerCase();
if (
text.includes('запланировать встречу') ||
text.includes('schedule meeting')
) {
savePhone();
}
}, true);
window.addEventListener('pagehide', savePhone);
if (document.readyState === 'loading') {
document.addEventListener(
'DOMContentLoaded',
fillWooCommercePhone
);
} else {
fillWooCommercePhone();
}
const observer = new MutationObserver(
fillWooCommercePhone
);
observer.observe(document.documentElement, {
childList: true,
subtree: true
});
setTimeout(function () {
observer.disconnect();
}, 20000);
})();
JAVASCRIPT;
wp_add_inline_script(
'jquery',
$script,
'after'
);
}, 999 ); Активация
После добавления:
- Нажмите Save.
- Переключите сниппет в состояние Enabled.
- Очистите кеш FlyingPress.
- Очистите корзину WooCommerce.
- Откройте сайт в режиме инкогнито.
- Проведите новое тестовое бронирование.
Как это работает
Во время заполнения FluentBooking введённый номер сохраняется в браузере. Например:
+7 999 999-99-99 После перехода на страницу оплаты сниппет находит поле: и подставляет в него сохранённый номер. Покупателю больше не требуется вводить телефон повторно. После оформления заказа номер сохраняется в WooCommerce и может быть передан платёжному модулю Продамус.

Возможные причины, если номер не появился
Проверьте следующее:
- сниппет включён в WPCodeBox2;
- выбран тип PHP;
- в код не добавлены
<?phpи?>; - кеш FlyingPress очищен;
- в корзине нет старого бронирования;
- проверка выполняется в новой вкладке инкогнито;
- на странице WooCommerce присутствует поле
billing_phone; - используется классическая страница оформления заказа WooCommerce.
Результат
После настройки клиент вводит номер телефона только один раз — в форме FluentBooking. При переходе к оплате тот же номер автоматически появляется в WooCommerce и передаётся дальше вместе с данными заказа.
Была ли статья полезной?
😎 Скажите, пожалуйста, что вам понравилось?! Читаю ваши отзывы
🤨 Что не понравилось? Пожалуйста, разделите свою печаль вместе со мной))
