Сохранение и показ согласий клиента на ПДн в заказе WooCommerce
Законодательство становится все строже и теперь для интернет-магазинов нужно записывать все согласия клиента на обработку персональных данных при оформления заказа.
Как я понимаю, на странице оформления заказа можно создать пользовательское поле с чекбоксом, сохранять его и результат показывать в заказах.
Как пример, можно реализовать такое пользовательское поле с согласием:
//Дополнительный чекбокс согласия на обработку персональных данных
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>';
}
Но у меня возник вопрос, можно ли по такому же принципу сохранять и показывать стандартное согласие, которое есть в WooCommerce? Я имею в виду блок "Я согласен с политикой конфиденциальности и правилами сайта" перед кнопкой "Подтвердить заказ".
Просто я не могу найти примеры и код для этого функционала. Буду рад вашей помощи. Тем более, такой код скоро понадобится многим сайтам.