Вступ
У цьому посібнику ми розглянемо, як умовно передавати кастомні поля до KeyCRM на основі стану чекбокса, встановленого на сторінці оформлення замовлення у WooCommerce. У випадку, коли клієнт не хоче отримувати дзвінки, ми будемо передавати певні додаткові дані в KeyCRM лише, якщо чекбокс “Не дзвонити мені” активований.
Крок 1:
Додавання чекбокса на сторінку оформлення замовлення
Спершу додамо чекбокс на сторінку оформлення замовлення, щоб клієнти могли вибрати опцію “Не дзвонити мені”.
Код для додавання в functions.php дочірньої теми
Вставте цей код у файл functions.php вашої дочірньої теми:
// Додаємо чекбокс "Не телефонуйте мені" на сторінку оформлення замовлення
add_action( 'woocommerce_review_order_before_submit', 'wcsuccess_add_custom_checkout_field' );
function wcsuccess_add_custom_checkout_field( $checkout ) {
woocommerce_form_field( ‘not_call_back’, array( // CSS ID
‘type’ => ‘checkbox’,
‘class’ => array(‘form-row mycheckbox’), // CSS Class
‘label_class’ => array(‘woocommerce-form__label woocommerce-form__label-for-checkbox checkbox’),
‘input_class’ => array(‘woocommerce-form__input woocommerce-form__input-checkbox input-checkbox’),
‘required’ => false, // Mandatory or Optional
‘label’ => ‘Не телефонуйте мені, я впевнений(на) в замовленні’,
));
}
Крок 2:
Збереження значення чекбокса у метаданих замовлення
Коли користувач оформляє замовлення і вибирає цю опцію, ми повинні зберегти значення чекбокса в метаполях замовлення.
// Зберігаємо значення чекбокса в метаполях замовлення
add_action( 'woocommerce_checkout_update_order_meta', 'wcsuccess_save_new_checkout_field' );
function wcsuccess_save_new_checkout_field( $order_id ) {
// Тільки якщо чекбокс активний
if ( ! empty( $_POST['not_call_back'] ) ) {
$value = isset($_POST['not_call_back']) ? 'yes' : 'no';
update_post_meta( $order_id, 'not_call_back', sanitize_text_field( $value ) );
}
}
// Відображаємо значення чекбокса в адмінці WooCommerce
add_action( 'woocommerce_admin_order_data_after_billing_address', 'wcsuccess_show_new_checkout_field_order' );
function wcsuccess_show_new_checkout_field_order( $order ) {
$order_id = $order->get_id();
if ( get_post_meta( $order_id, 'not_call_back', true ) ) echo 'НЕ дзвонити мені: ' . get_post_meta( $order_id, 'not_call_back', true ) . '
';
}
// Додаємо значення чекбокса в листи підтвердження замовлення
add_action( 'woocommerce_email_after_order_table', 'wcsuccess_show_new_checkout_field_emails', 20, 4 );
function wcsuccess_show_new_checkout_field_emails( $order, $sent_to_admin, $plain_text, $email ) {
if ( get_post_meta( $order->get_id(), 'not_call_back', true ) ) echo 'Не дзвонити мені: ' . get_post_meta( $order->get_id(), 'not_call_back', true ) . '
';
}
Пояснення коду
- Додавання чекбокса: Використовується хук
woocommerce_review_order_before_submitдля відображення чекбокса на сторінці оформлення замовлення. - Збереження значення: Значення чекбокса зберігається в метаполях замовлення при оформленні.
- Відображення в адмінці: В адмін-панелі WooCommerce показується статус опції “Не телефонуйте мені” для кожного замовлення.
- Додавання в листи: Значення чекбокса також відображається в листах замовлення, що відправляються адміністратору та клієнту.
Цей код дозволяє легко інтегрувати чекбокс “Не телефонуйте мені” в процес оформлення замовлення і автоматично обробляти цю інформацію.
Крок 3:
Додавання кастомних полів до KeyCRM
Тепер, коли значення чекбокса збережено, ми можемо додавати кастомні поля до запиту, який відправляється в KeyCRM. Проте, ми будемо передавати ці дані тільки в тому випадку, якщо клієнт вибрав опцію “Не дзвонити мені”.
// Умовне додавання custom_fields
'custom_fields' => (get_post_meta($wcOrder->get_id(), 'not_call_back', true) === 'yes') ? [
[
'uuid' => 'OR_1017',
'value' => $order['externalId']
]
] : [],
-
Пояснення коду
- Перевірка чекбокса: Ми отримуємо значення метаполя
not_call_back, яке містить стан чекбокса “Не дзвонити мені”. Якщо значення є'yes', це означає, що чекбокс був активований. - Умовне додавання кастомних полів: Якщо клієнт вибрав опцію “Не дзвонити мені”, ми додаємо кастомні поля до масиву замовлення (
'custom_fields'). Якщо ж чекбокс не був активований, цей блок не додається.
- Перевірка чекбокса: Ми отримуємо значення метаполя
Крок 4: Тестування та перевірка
Після внесення змін в код необхідно перевірити, чи передаються кастомні поля в KeyCRM лише в тому випадку, якщо клієнт вибрав опцію “Не дзвонити мені”. Ви можете додати логування для перевірки, чи працює перевірка:
WC_Keycrm_Logger::add(sprintf("not_call_back value: %s", $not_call_back));
Це дозволить вам побачити значення чекбокса і перевірити, чи правильно працює умовна логіка.
Висновок
За допомогою цього підходу ви можете умовно передавати кастомні поля в KeyCRM на основі значення чекбокса у WooCommerce. Це дає можливість гнучко обробляти дані клієнтів та оптимізувати процес інтеграції з CRM.



