WordPress. Защита формы комментария

31.05.2019

Теги: CMSHookWeb-разработкаWordPressКомментарииПлагинФорма

Давайте создадим плагин, который изменит форму для добавления комментария к записи блога. Плагин будет удалять из формы поле «Сайт» и добавлять простую проверку на робота. Для проверки на робота мы просто добавим checkbox «Я не робот», который пользователь должен отметить.

Итак, создаем директорию tokmakov-captcha, а внутри нее — файл tokmakov-captcha.php:

<?php
/*
Plugin Name: Добавляет captcha для формы комментария
Plugin URI: https://tokmakov.msk.ru
Description: Добавляет проверку на робота для формы комментария и удаляет поле «Сайт»
Version: 1.0
Author: Евгений Токмаков
Author URI: https://tokmakov.msk.ru
*/

Удаляем поле «Сайт» и добавляем checkbox «Я не робот»:

add_filter('comment_form_default_fields', function($fields) {
    // удаляем из формы поле «Сайт»
    unset($fields['url']);
    // добавляем проверку на робота
    $fields['captcha'] =
<<<CAPTHA
    <p class="comment-form-captcha">
        <input id="captcha" name="captcha" type="checkbox" value="1" required="required" />
        <label for="captcha">Я не робот <span class="required">*</span></label>
    </p>
CAPTHA;
    return $fields;
});

После отправки формы проверяем, что checkbox был отмечен:

add_filter('preprocess_comment', function($comment) {
    if (is_user_logged_in()) {
        return $comment;
    }
    if (!isset($_POST['captcha'])) {
        wp_die('Не отмечен checkbox «Я не робот»');
    }
    return $comment;
});

Фильтр preprocess_comment

Позволяет изменить данные комментария перед тем, как они будут очищены и добавлены в базу данных. Фильтр срабатывает в самом начале функции wp_new_comment(), которая добавляет новый комментарий.

add_filter('preprocess_comment', function($comment) {
    die(print_r($comment));
});
Array
(
    [comment_post_ID] => 1883
    [comment_author] => admin
    [comment_author_email] => admin@server.com
    [comment_author_url] => 
    [comment_content] => Какой-то комментарий
    [comment_type] => 
    [comment_parent] => 0
    [user_ID] => 1
)

Поиск: CMS • Web-разработка • WordPress • Форма • Коииентарий • Comment • Hook • Плагин • Plugin

Каталог оборудования
Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua.
Производители
Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua.
Функциональные группы
Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua.