Продолжаю тему о «пользовательском соглашении об обработке персональных данных«. В этот раз мы будем добавлять галочку в форму комментариев сайта на WP.
Требуемые изменения
Задача состоит в том, чтобы внести изменения в штатную форму комментариев:
- нужно добавить галку с флажком о принятии соглашения,
- а после отправки данных — проверить флажок
Без программирования в этот раз не обойтись, а готовые решения пока ещё не появились. Но задача очень простая и справиться можно своими силами.
Если в теме используется штатный механизм работы с формой комментариев, то следующий гайд поможет вам решить задачу.
В файл темы оформления functions.php нужно добавить кусочки кода, которые реализуют описанные выше требуемые изменения.
Добавим флажок о принятии соглашения
Флажок должен появиться перед кнопкой «Отправить». WP, начиная с версии 4.2, предоставляет нужную зацепку — comment_form_submit_field.
1 2 3 4 5 6 7 8 9 10 |
add_filter('comment_form_submit_field', 'add_checkbox', 10, 2); function add_checkbox($submit_field, $args) { return '<p><label> <input type="checkbox" name="agree" value="1" checked /> Я принимаю <a href="/agreement" target="_blank">соглашение сайта</a> об обработке персональных данных.</label> </p>' . $submit_field; } |
HTML код флажка содержит ссылку на страницу соглашения (поправьте URL, если нужно). Чекбокс по-умолчанию включен, чтобы пользователь не тратил на него время.
Проверка флажка
Когда данные комментария отправлены, пройдена часть проверок, нужно удостовериться, что пользователь не сбросил флажок.
Цепляемся к действию WP — pre_comment_on_post.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 |
add_action('pre_comment_on_post', 'checkbox_test'); function checkbox_test($comment_post_ID) { if (empty($_POST['agree'])) { $Err = new WP_Error( 'comment_closed', 'Вы не приняли соглашение сайта об обработке персональных данных!' ); $data = intval( $Err->get_error_data() ); wp_die( '<p>' . $Err->get_error_message() . '</p>', __( 'Comment Submission Failure' ), array( 'response' => $data, 'back_link' => true ) ); exit; } } |
Смысл в том, чтобы не допустить сохранения комментария, если пользователь не дал согласия на обработку персональных данных. Вместо этого, мы выведем сообщение об ошибке.
Спасибо. Очень помогло! Пробовал другим способом, через add_action, выводило, но почему-то не отрабатывал атрибут required. И ваш вариант без второй части кода почему-то тоже не отрабатывает, по крайней мере в Firefox… Но вторая часть кода всё решила. И всё-таки непонятно, почему на уровне браузера не срабатывает ограничение?
P.S. Кстати, галку по умолчанию нельзя ставить, разжёвано юристами.