Закон о персональных данных всё лютее и лютее. Государство нас активно защищает, но спама меньше не становится… Но да ладно, что-то меня с первых строк в лирику потянуло.
Итак, знакомые юристы настоятельно рекомендуют добавлять отдельный чекбокс согласия на обработку персональных данных. Теперь опасно объединять его с чекбоксом ознакомления с офертой или политикой конфиденциальности. Он должен быть отдельным и проставляться пользователем явно. В противном случае РКН может возбудиться.
Из коробки Woocommerce добавлять дополнительные галочки не умеет, поэтому добавим немного кода в functions.php
.
Чекбокс согласия будет добавлен под основным, в котором принимаются условия магазина. Можно, конечно, добавить чекбокс с помощью плагина кастомных полей прямо под форму, но мне захотелось, чтобы все эти «чекбоксы принятия» были в одном месте.
//Дополнительный чекбокс согласия на обработку персональных данных
add_action('woocommerce_review_order_before_submit', 'add_custom_privacy_checkbox', 20);
function add_custom_privacy_checkbox() {
?>
<p class="form-row privacy-accept validate-required">
<label class="woocommerce-form__label woocommerce-form__label-for-checkbox checkbox">
<input type="checkbox" class="woocommerce-form__input woocommerce-form__input-checkbox input-checkbox" name="custom_privacy" id="custom_privacy">
<span class="woocommerce-terms-and-conditions-checkbox-text">
Даю согласие на обработку моих персональных данных *
</span>
</label>
<input type="hidden" name="custom_privacy_field" value="1">
</p>
<?php
}
add_action('woocommerce_checkout_process', 'validate_custom_privacy_checkbox');
function validate_custom_privacy_checkbox() {
if (!isset($_POST['custom_privacy'])) {
wc_add_notice('Вы должны дать согласие на обработку персональных данных. Без этого РКН может мне сделать «а-та-та» :(', 'error');
}
}
//Сохраняем полученное согласие в мета-данные заказа
add_action('woocommerce_checkout_update_order_meta', 'save_custom_privacy_consent');
function save_custom_privacy_consent($order_id) {
if (isset($_POST['custom_privacy'])) {
update_post_meta($order_id, '_custom_privacy_consent', 'yes');
} else {
update_post_meta($order_id, '_custom_privacy_consent', 'no');
}
}
//Выводим в карточке заказа, что согласие получено
add_action('woocommerce_admin_order_data_after_billing_address', 'display_custom_privacy_consent_in_admin', 10, 1);
function display_custom_privacy_consent_in_admin($order) {
$consent = get_post_meta($order->get_id(), '_custom_privacy_consent', true);
$status = ($consent === 'yes') ? 'Получено' : 'Не получено';
echo '<p><strong>Согласие на обработку персональных данных:</strong> ' . $status . '</p>';
}
Собственно, вот и всё. Можете в коде исправить лейбл чекбокса, а также текст ошибки, если галочка не отмечена пользователем. Создать заказ без согласия на обработку ПД теперь не получится. Да, конверсия не скажет спасибо, зато и предписания от РКН не получите.