Как добавить reCAPTCHA в DW Questions & answers

Плагин DW Questions & answers — один из лучших плагинов для WordPress для организации блока «Вопрос-ответ» на сайте. Однако, благодаря его распространённости, его полюбили спамеры, а стандартная captcha ужасна — её даже не нужно разгадывать, правильный ответ передаётся в коде.

Конечно, есть вариант поставить платное дополнение от DesignWall, но, судя по отзывам, работает оно не самым лучшим образом.

Предлагаю сегодня разобрать вопрос установки Google reCAPTCHA в форму вопроса DW Questions & answers.

Предварительная подготовка

Перед тем, как начинать править код, нужно перенести шаблоны DW Questions & answers в папку темы, чтобы их можно было безболезненно настраивать, не опасаясь обновления плагина. Для этого нужно перенести все шаблоны из папки templates плагина в папку dwqa-templates вашей темы.

Добавляем Google reCAPTCHA

Принцип использования reCAPTCHA в нашем случае — мы отключаем кнопку submit формы и открывает её callback-функция в случае удачного разгадывания капчи.

Для этого нужно:

  1. Отключить кнопку Submit
  2. Добавить код вызова капчи
  3. Добавить функцию, включающую кнопку после разгадывания капчи

Добавляем капчу в форму вопроса

Начнём с формы вопроса, её шаблон находится в файле (ваша папка темы)\dwqa-templates\question-submit-form.php

Отключаем кнопку и даём ей уникальный идентификатор. Для этого ищем строчку, начинающуюся с <input type="submit" name="dwqa-question-submit" и меняем её на следующую:

<input type="submit" name="dwqa-question-submit" id="question-submit-button" value="<?php _e( 'Submit', 'dwqa' ) ?>" disabled >

В месте, где должна стоять капча, добавлем собственно капчу:


<div class="g-recaptcha" data-callback="recaptchaCallback" data-sitekey="site-key"></div>

Вместо site-key нужно поставить код сайта, полученный у Google

После формы добавляем скрипт вызова капчи и callback-функцию:

<script src='https://www.google.com/recaptcha/api.js?hl=ru'></script>
 <script>
 function recaptchaCallback ( code )
{
 if(code != "")
 {
 document.getElementById("question-submit-button").disabled = false;
 }
}
</script>

Аналогичным образом дорабатываем форму ответа (файл answer-submit-form.php), если у вас разрешены ответы анонимных пользователей.

3 комментария

  1. Не знаю, жив ли блог)
    Спасибо за статью! Поставил каптчу в форму вопроса.
    Но в форму ответа не получается. Делаю все тоже самое, но не срабатывает. Я так понимаю, это связано с тем что там есть еще доп.поля (видимость ответа – всем, личный) и из-за этого как-то по другому отправка идёт.
    Не могли бы посмотреть? Или как раз не вышло это сделать, поэтому нет информации?

    1. У заказчика отвечают только редакторы сайта, поэтому задачу не реализовывал.
      В форме ответа нужно в файле answer-submit-form.php добавить disabled к кнопке

      <input type="submit" name="submit-answer" class="dwqa-btn dwqa-btn-primary" value="">

      И соответственно в функции recaptchaCallback заменяем строчку на

      document.getElementsByName("submit-answer")[0].disabled = false;

      Если что-то пойдёт не так — пишите, что именно не работает (кнопка не отключается, не включается и т.п.)

Добавить комментарий

Ваш e-mail не будет опубликован. Обязательные поля помечены *

Этот сайт использует Akismet для борьбы со спамом. Узнайте как обрабатываются ваши данные комментариев.