Все секреты плагина Contact Form 7

Плагин-конструктор обратных форм связи для WordPress "Contact Form 7" в особой рекламе не нуждается. Валидный, мультиязычный, простой в настройках, постоянно обновляемый в каталоге плагинов WP.  Эти и другие качества сделали его любимчиком среди владельцев сайтов на WordPress, по состоянию на начало 2016 года плагин скачали и установили более 35 миллионов человек! На сегодняшний день Contact Form 7 является заслуженно продвинутым плагином контактных форм!

В Contact Form 7 (CF7) можно конструировать всевозможные формы для обратной связи, используя для этого различные типы полей. И хотя у плагина есть постоянные обновления и довольно полная документация на сайте http://contactform7.com, время от времени возникают нетривиальные ситуации, когда функционала плагина явно недостаточно.

Разумеется, спасает ситуацию бесчисленное множество дополнений различных сторонних разработчиков в виде отдельных плагинов к CF7 (см.ниже). Но если есть возможность обойтись без плагина - всегда ее используйте!

Я опишу несколько ситуаций, в которые попадал во время работы с клиентскими сайтами, а также предоставлю решения возникших проблем с Contact Form 7.

Валидация телефонного номера в Contact Form 7

В CF7 нет какой-либо встроенной функции проверки валидации телефонного номера, хотя поле с указанием телефона очень часто встречается в контактных формах типа "Заказать обратный звонок". Идеальным решением было бы использование маски ввода, по типу +7 (___) ___-__-__ и человек ничего не напутает и скрипт не пропустит не правильный номер телефона!

Как сделать в Contact Form 7 поле для ввода телефона? Это не сложно, мы воспользуемся помощью готового JS скрипта «Masked Input Plugin».

Шаг 1. В конструкторе контактных форм Contact Form 7 создаем текстовое поле

[text* telefon class:tel placeholder "+7 (___) ___-__-__"]

Шаг 2. Скачиваем js скрипт тут jquery.maskedinput.min.js (подключаем в шаблон своего сайта как обычный js файл). Например:

<script type='text/javascript' src='https://ваш_сайт.ru/js/jquery.maskedinput.min.js'></script>

Шаг 3. В файле  functions.php своей темы добавляем следующий код:

add_action('wp_footer', 'wpmidia_activate_masked_input');
function wpmidia_activate_masked_input(){
?>
<script type="text/javascript">
jQuery( function($){
$(".tel").mask("+7 (999) 999-9999");
});
</script>
<?php
}

Теперь у нас появилось поле с вводом телефона по маске +7 (___) ___-__-__ Поле требует ввода только цифр, при не полном заполнении попросит его заполнить. Такими нехитрыми шагами мы реализовали валидацию телефонного номера в поле формы Contact Form 7.

Передача Get-запросов в форму Contact Form 7

Иногда на сайтах возникает такая необходимость, как передать в контактную форму связи какое-либо динамичное поле. Ну, например: есть сайт стоматологической клиники с огромным перечнем врачей и наша задача - создать форму обратной связи с возможностью записаться на прием к каждому врачу.  Естественно, создавать для каждого врача свою форму связи мы не будем. Под фотографией каждого врача будет стоять кнопка "Записаться на прием к врачу" которая ведет на страницу с контактной формой Contact Form 7. В эту форму мы и будем передавать данные Get-запросом (фамилия врача будет передаваться в ссылке и добавляться в форму обратной связи  Contact Form 7).

Как передать данные в форму  Contact Form 7 Get-запросом? Шагов всего три:

Шаг 1. В конструкторе контактных форм Contact Form 7 создаем поле:

[getzapros vrach]

Шаг 2. В  functions.php своей темы добавляем следующий код:

wpcf7_add_shortcode('getzapros', 'wpcf7_getzapros_shortcode_handler', true);
function wpcf7_getzapros_shortcode_handler($tag) {
if (!is_array($tag)) return '';
$name = $tag['name'];
if ($_GET[$name]=='') {
$html = '';
}
else
{
$html = '<input type="hidden" name="' . $name . '" value="'. $_GET[$name] . '" />';
}
return $html;
}

Шаг 3. Чтобы передать данные в форму которая находится по адресу /contact.htm, мы должны сформировать ссылку таким образом:

/contact.htm?vrach=фамилия врача

Отправка SMS из Contact Form 7

Основное предназначение контактных форм на сайтах - отсылать заполненные пользователем данные на адрес электронной почты владельца сайта. Владелец сайта прочитает письмо посетителя лишь открыв свою электронную почту. А если это интернет-магазин и вам нужно максимально быстро реагировать на письмо посетителя? В таком случае необходимо отсылать SMS сообщение владельцу сайта, телефон всегда при нем - обратная связь получится практически мгновенной. От нажатия кнопки "Отправить" и прочтением адресатом пройдет всего пару секунд! На просьбу посетителя (например, перезвонить ему), вы сможете отреагировать максимально быстро!

Как отправить SMS из Contact Form 7? Шагов всего два:

Шаг 1. Определиться с отправителем SMS. Бесплатных отправителей я не знаю, поэтому рекомендую использовать SMS-шлюзы от специальных сервисов, например - http://seozona.sms.ru (в зависимости от ежедневного количества нужных Вам SMS, Вы можете пользоваться сервисом даже совершенно бесплатно). Такие SMS-шлюзы работают очень просто, вы отправляете нужные вам данные на специальный урл адрес и Ваша SMS доставляется адресату (я покажу ниже пример для только что упомянутого SMS шлюза, если Вы надумаете использовать его в качестве отправителя).

Шаг 2. Для того чтобы подготовить SMS, нам надо перехватить передаваемые данные из Contact Form 7. Сделать это можно в файле functions.php Вашей темы:

add_action( 'wpcf7_mail_sent', 'your_wpcf7_mail_sent_function' );
function your_wpcf7_mail_sent_function( $contact_form ) {
$title = $contact_form->title;
$posted_data = $contact_form->posted_data;
if ('Контактная форма 1' == $title ) { //замените на свое название контактной формы
$submission = WPCF7_Submission::get_instance();
$posted_data = $submission->get_posted_data();
//далее мы перехватывает те поля из формы, которые хотим запихнуть в SMS
$yourphone = $posted_data['your-message']; //перехватываем поле [your-message]
$yourname = $posted_data['your-name']; //перехватываем поле [your-name]
$mes = $yourphone.' '.$yourname; //выстраиваем перехваченные переменные в одно сообщение

//...здесь мы должны отправить ваше SMS, которое находится в переменной $mes
//Вариант 1. Использование функции Email to SMS у украинского мобильного оператора Киевстар
//$mail = mail ('380971234567@sms.kyivstar.net','',$mes,"Content-type:text/plain; charset = utf-8\r\nFrom:$email");

//Вариант 2. Использование SMS-шлюза http://seozona.sms.ru
//$sms = str_replace(' ','+', $mes);
//$idapi = "00000-0000-0000-000"; //уникальный api_id, выдается после регистрации 
//$nomer ="701231234567"; //телефон получателя
//$urlsms="http://sms.ru/sms/send?api_id=$idapi&to=$nomer&text=$sms";
//$body=file_get_contents($urlsms);
}
}

Вызов Contact Form 7 лишь на отдельной странице

Как правило, формы обратной связи для посетителей размещаются на отдельно взятой странице сайта, типа "О нас", "Контакты", "Обратная связь" и т.д. Но если мы откроем исходный код нашего сайта на любой странице, то заметим там вызов файлов плагина Contact Form 7, например:

/wp-content/plugins/contact-form-7/includes/js/jquery.form.min.js
/wp-content/plugins/contact-form-7/includes/js/scripts.js

Получается, что файлы плагина грузятся в браузер пользователя даже тогда, когда вообще не нужны!  Как вызвать Contact Form 7 лишь на отдельной (целевой) странице сайта? Нас выручит код, который размещаем в functions.php текущей темы:

add_action ( 'wp_print_scripts', 'my_deregister_javascript', 100 );
function my_deregister_javascript () {
if ( !is_page ('contact') ) {
wp_deregister_script ( 'contact-form-7' );
}
}

Код разрешит активацию  плагина Contact Form 7 только на странице наш_сайт.ру/contact

Переадресация после отправки формы Contact Form 7

По умолчанию, после заполнения и отправки данных с формы Contact Form 7, пользователь остается на той же странице, получая по Ajax сообщение о статусе отправки сообщения. В некоторых случаях и для некоторых целей иногда полезно переадресовать пользователя на отдельную страницу. Сделать это можно используя встроенные возможности. В конструкторе контактной формы перейдите на вкладку "Дополнительные настройки" и добавьте строчку кода:

on_sent_ok: "location.replace('http://ваш_сайт.ру/spasibo/');"

В случае успешной отправки письма с контактной формы, пользователь будет переадресован на http://ваш_сайт.ру/spasibo/

Вывод Contact Form 7 в шаблоне сайта

Контактную форму CF7 можно вставить в любую запись или страницу сайта используя шорткод из раздела "Код вставки". Он выглядит примерно следующим  образом:

[соntact-form-7 id="39865" title="Заголовок"]

А если нужно контактную форму CF7 вставить в нижнюю сайта, непосредственно в файл footer.php вашей текущей темы WordPress?  В таком случае, код придется немного модифицировать:

<?php echo do_shortcode('[соntact-form-7 id="39865" title="Заголовок"]');?>

Дополнительный функционал для CF7

Некоторые задачи с CF7 невозможно решить путем встраивания несложного кода в functions.php, поэтому можно обратиться за помощью к сторонним плагинам, которые расширяют и дополняют функционал CF7. Их можно найти на любой вкус и цвет, для самых разнообразных задач (можно искать в каталоге плагинов WordPress по ключу CF7). Возможно, Вам пригодятся:

  • Contact Form 7 reCAPTCHA Extension - плагин добавляет в Contact Form 7 каптчу
  • Contact Form 7 Select Box Editor Button - плагин добавляет выпадающее меню с возможностью выбирать адресата
  • Contact Form DB - плагин записывает отправленные контактные формы в базу данных сайта, ведет статистику
  • Contact Form 7 Integrations - плагин интегрирует контактные формы сайта с сторонними сервисами, например Google Docs
  • Contact Form 7 Dynamic Text Extension - специфический плагин, добавляющий новый тип поля — динамичное содержание (есть скрытое и открытое поле)
  • Contact Form 7 Tiny MCE - плагин добавляет визуальный редактор в контактную форму
  • Contact Form 7 Skins - плагин для оформления внешнего вида контактных форм CF7...

На этом все! Кому помог, благодарственные комментарии приветствуются!

Оцените материал:
Звёзд: 1Звёзд: 2Звёзд: 3Звёзд: 4Звёзд: 5 (42 голоса, рейтинг: 4,74 из 5)
Загрузка...

Вячеслав - типичный интернетчикВячеслав Скоблей (ака files) - типичный интернетчик. Скитаюсь интернетом, пишу на PHP, увлекаюсь созданием веб-сайтов на Wordpress, решаю многочисленные проблемы, которые до появления интернета не существовали...

Специализируюсь на безопасности сайтов: защищаю сайты от атак и взломов, занимаюсь лечением вирусов на сайтах и профилактикой...

Наверняка у Вас есть вопросы, просьбы или пожелания. Не стесняйтесь спросить, я отвечаю всегда быстро...

176 комментарий

  1. Станислав says:

    Спасибо за интересную статью
    вот здесь не совсем понятно
    https://seo-zona.ru/vse-sekrety-plagina-contact-form-7-2016-03-05.html#Contact_Form_7
    если мне нужно например всего на трёх страницах (записях) вывести CF7 надо перечислить все три или как?
    Например:
    add_action ( 'wp_print_scripts', 'my_deregister_javascript', 100 );
    function my_deregister_javascript () {
    if ( !is_page ('contact'),
    if ( !is_page ('page_1'),
    if ( !is_page ('page_2') ) {
    wp_deregister_script ( 'contact-form-7' );
    }
    }
    И как их правильно указать, по id или постоянным url или как правильно? заранее спасибо.

    1. Станислав says:

      Ещё вопросик. Прописал в шаблон письма:
      IP отправителя [_remote_ip]
      всё работает, ip приходит. А можно ли сделать, чтоб рядом приходил город/страна по IP который определился. Видел есть разные скрипты, но как и подключить к выводу в Contact Form 7 не знаю,не понимаю

  2. serge says:

    Добрый день! А что если требуется после отправки формы выдать пользователю благодарственную страницу с содержанием введенных им данных в форме (например, name, email). Или хотя бы сформировать ссылку с GET параметрами?

    1. Вячеслав Скоблей says:

      Здесь реализован перехват:
      https://seo-zona.ru/vse-sekrety-plagina-contact-form-7-2016-03-05.html#comment-11421
      Далее делаете, что хотите. В вашем случае - редирект на страницу с передачей GET параметров.

      1. Serge says:

        Редирект понятен, в крайнем случае есть плагины, вставка get параметров также. Но вордпресс не позволяет вывод параметров, т.к. php заблокирован.

        1. Вячеслав Скоблей says:

          Не знаю всех Ваших условий! Если трудности с PHP, попробуйте JavaScript:

          function get(key) {
            var s = window.location.search;
            s = s.match(new RegExp(key + '=([^&=]+)'));
            return s ? s[1] : false;
          }
          console.log(get('name'));

          //name - выведет значение GET параметра name
          //stranica?name=Василий

          1. Serge says:

            Спасибо за внимание к вопросу. Имелось ввиду как вывесть значение GET в страницу или пост WordPress. По стандарту все скрипты на wordpress отключены и их нельзя добавлять на страницу. Нужно просто вывод на результирующей странице: "Спасибо за заполненную форму, NAME". Каким способом наиболее просто это сделать без изменений функций CMS?

            1. Вячеслав Скоблей says:

              1) Вы написали, что умеете отправлять GET запросы на нужные Вам страницы.
              2) В исходном коде страниц, на которые отправляются данные, делаете перехват на JS (раз не можете в PHP):

              Спасибо: <span id="ip_i"></span> Ваш телефон <span id="ip_t"></span>  <script> function get(key) {   var s = window.location.search;   s = s.match(new RegExp(key + '=([^&=]+)'));   return s ? s[1] : false; } document.getElementById("ip_i").innerHTML = get('imeno'); document.getElementById("ip_t").innerHTML = get('tel'); </script>

  3. Евгений says:

    Здравствуйте Вячеслав. Вопрос такой - надо в форму добавить поле ввода, так сказать, секретного ключа - который человек вводит и форма отправляется. Что то типо капчи, по с постоянным значением или значениями которые я ввожу сам.

    1. Вячеслав Скоблей says:

      Доброго времени суток, Евгений.
      Не сталкивался с такой ситуаций, но вроде это то, что вам нужно - плагин "Contact Form 7 Add Password field" добавляющий поле пароля в CF7
      https://wordpress.org/plugins/cf7-add-password-field/#description
      Отпишитесь, подошло ли под Ваши требования?

      1. Evgeny says:

        Не, в форме уже пароль есть. Я же говорю, что то типа капчи, но с постоянным значением. А Contact Form 7 Add Password field установил, туда пользователь вводит пароль (во время регистрации). А есть какой то дополнение капча, в которой ты сам можешь вносить значения?

        1. Вячеслав Скоблей says:

          Можно ли это значение (пароль) проверять на стороне пользователя? То есть, на стороне JS и пароль будет открытым, в недрах исходного кода страницы.
          Или это должен быть супер-пароль?

          1. Evgeny says:

            Просто поле, туда вводишь цифру "1" (это число которое надо вести обязательно, что то типо капчи, но скрытой), к примеру, и форма отправляется. Это число знаю только я. Если пользователь хочет зарегистрироваться, то он должен узнать это число у меня.

            1. Вячеслав Скоблей says:

              Спасибо за уточнение. Не зря говорят, что правильно сформулированный вопрос содержит половину ответа!
              Используйте в шаблоне формы Contact Form 7 конструкцию:

              [quiz invait "Ваш инвайт|12345"]

              12345 - это ваш пароль/инвайт.

              1. Evgeny says:

                Всё отлично работает. Огромное спасибо!

      2. Александр says:

        Здравствуйте Вячеслав
        Приветствую!! Сможете ли Вы мне помочь?
        Сайт на WordPress. Есть 2 плагина :
        1. Contact Form 7 формы для заявок
        2. Orbis создание и распределение задач между сотрудниками.
        Нужно создать событие после того как посетитель сайта заполнил форму и нажал отправить. Нужно что бы после нажатия отправить в Orbis появлялся новый проект с текстом из заполненной формы. Далее этот проект выберет один из сотрудников.

        1. Вячеслав Скоблей says:

          Не помогу. Не знаком с Orbis

  4. Denis says:

    Доброго времени суток. А можно ли в выпадающий список вставить заголовки постов. Определенной рубрики.
    Типа, что то такое?

  5. Алексей says:

    Здравствуйте! Вопрос - можно ли как то в Contact Form 7 запретить отправку сообщений содержащих определённые слова...ну жо...а например)))))

    1. Вячеслав Скоблей says:

      Contact Form 7 поддерживает спам-фильтры самого WordPress, поэтому все просто:
      Консоль - Обсуждения - Черный список (сюда пишем все СТОП-слова).
      Обратите внимание на пояснения:

      Если комментарий содержит какие-либо из этих слов в своём тексте, имени автора, URL, адресе e-mail или IP, то он будет помечен как спам. Каждое слово или IP задается с новой строки. Используется поиск по подстроке, то есть по слову “press” будет найдено “WordPress”.

      Будьте внимательны при составлении списка, так как поиск идет по подстроке. Если у Вас англоязычный ссылочный СПАМ, то можно использовать такой список:

      [url=http
      <a href="http
      Bonus
      casino
      Visit site
      Sexy
  6. Доброго времени!

    Отличная статья становится ещё более ценной живым ответам со 100% результативностью! Благодарю автора!
    Прошу помощи с функцией action. Куда её вставить в современную версию плагина, чтобы он action отрабатывался вместе с отправкой формы?

    Большое спасибо!

    1. Вячеслав Скоблей says:

      Если Вы о перехвате отправленных данных, то примерно так:

      function your_wpcf7_mail_sent_function($contact_form){
      $title = $contact_form->title;
      $posted_data = $contact_form->posted_data;
      if ('V_single' == $title) { //название вашей формы из которой необходимо перехватить данные
      $submission = WPCF7_Submission::get_instance();
      $posted_data = $submission->get_posted_data();
      // Далее перехватываем введенные данные в полях Contact Form 7:
      $f7Name = $posted_data['your-name'];
      $f7Email = $posted_data['your-email'];
      
      //теперь отправляем, например, на почту:
      mail("кому@письма.ру", $f7Name, $f7Email);
      
      }
      }
      add_action('wpcf7_mail_sent', 'your_wpcf7_mail_sent_function');
      
  7. says:

    Здравствуйте! У меня контактная форма отображается во всплывающем окне, сделанном через плагин PopUp Maker. На разных страницах сайта (по несколько кнопок на страницу) расположены кнопки "Заказать" по которым и открывает всплывающее окно в форме. Вы не подскажете как можно передать в письмо, которое отправится админу сайта, ид кнопки, которую нажимал пользователь? Что бы собственно понять что именно он хотел заказать.

  8. Вячеслав says:

    Здравствуйте! Подскажите, а можно сделать так, чтобы номер телефона на почту в заявке приходил в виде ссылки tel:. Чтобы с мобильного можно было сразу набрать номер нажав на него?

    1. Вячеслав Скоблей says:

      Да, можно, это очень просто.
      В шаблоне ПИСЬМА ниже ТЕЛА ПИСЬМА поставьте галочку "Использовать HTML-формат письма".
      А в самом ТЕЛЕ ПИСЬМА телефон пишем так:

      <a href="tel:[your-tel]">[your-tel]</a>
  9. Евгений says:

    Ещё раз здравствуйте. Вопрос по календарю
    В письме приходит форма даты в следующем виде, пример: 2019-11-22 (Год - число - месяц). А можно сделать что бы приходило - Число-месяц-год? Где и как это исправить?

    P/S/
    Огромное спасибо за ваш сайт и лично Вам Вячеслав - Вы очень помогаете!

    1. Вячеслав Скоблей says:

      В форме получения письма используйте тег в формате:

      [_format_{field name} "{date format}"]

      В вашем случае (чтобы получить число-месяц-год) тег выглядит следующим образом:

      [_format_your-date "DD-MM-YYYY"]
      1. Евгений says:

        Приходит вот такое вот
        Дата заезда: ПнMon-ДекDec-2019201920192019
        Дата выезда: ВсSun-ДекDec-2019201920192019

        Код обратного письма

        От: [text-363]
        Email: [email-389]
        Телефон: [text-364]
        Номер: [menu-151]
        Дата заезда: [_format_date-220 "DD-MM-YYYY"]
        Дата выезда: [_format_date-221 "DD-MM-YYYY"]
        Количество взрослых: [your-number-1]
        Количество детей: [your-number-2]
        Возраст детей: [deti-kol]
        ребёнок[group_index]/
        [your-number-3] лет,
        [/deti-kol]
        Страница с которой отправили запрос: [_url]

        Сообщение:
        [textarea-792]

        1. Вячеслав Скоблей says:

          Значит, либо у вас пустой "Шаблон формы" (CF7), либо там совершенно другие теги полей.

  10. Евгений says:

    Есть такой вопрос - я установил дополнение к Contact Form 7 (Repeatable Fields). Что бы была возможность пользователям добавлять новое поле для ввода данных (на сайте это реализовано как - Возрост ребёнка (детей может быть больше одного, вот для каждого и надо вводить возраст). Вот в чём проблема - в письме которое приходит мне указанный возрас (заполненные поля именно возраста) выводятся тегом (Возраст детей: лет) - без указанных в поле данных.
    Вся форма вывода данного поля
    [field_group deti-kol id="deti-kol" tabindex:1]
    Возраст детей
    [number number-101 min:0 max:99 step:1]
    [/field_group]

    Как можно это исправить? Или есть более доступный способ добавление полей пользователями?
    Спасибо!

    1. Вячеслав Скоблей says:

      Смотрите документацию к плагину. Скорее всего, вы не правильно подключаете.

      1. Евгений says:

        Может в форме отправке мне письма не так ввожу
        От: [text-363]
        Email: [email-389]
        Телефон: [text-364]
        Номер: [menu-151]
        Дата заезда: [date-220]
        Дата выезда: [date-221]
        Количество взрослых: [your-number-1]
        Количество детей: [your-number-2]
        Возраст детей: [your-number-3] лет
        Страница с которой отправили запрос: [_url]

        Сообщение:
        [textarea-792]

        [your-number-3] - это добавленные поля пользователями

    2. Илья says:

      У меня таже проблема, вы как то разобрались?

  11. Slava says:

    Здравствуйте, Столкнулась с такой проблемой:
    У меня на сайте расположено на разных страницах с разными смысловыми нагрузками несколько контактных форм, по структуре они одинаковые, но под каждую страницу создавалась отдельная форма в которой была указана другая тема, но когда отправляешь письмо с формы на пример с темой финансов или любой другой темой, оно приходит на почьту все под одной темой финансы, подскажите как можно решить эту проблему.

  12. says:

    Можно использовать этот крошечный плагин:
    https://wordpress.org/plugins/cf7-better-ui

    1. Вячеслав Скоблей says:

      Это для изменения внешнего вида форм Contact Form 7?

  13. Валера says:

    Добрый день! Хорошая статья, я хоть и не программист, но и то понял о чем речь :) Только вот до кода у меня дело никогда не доходит, всегда готовые плагины использую)) Сейчас вообще решил не заморачиваться сильно а сделала на stepform.io/ru там как раз для меня "не программиста".

  14. Данил says:

    Всем доброго времени суток.
    Нужна помощь! Может кто подсказать про Contact Form 7?
    Ну нужно чтобы при нажатии на "услугу" открывалась "доп услуга (списком)" Нажал такой и список вытаращился))

  15. Александр says:

    Добрый день! подскажите как добавить свой placeholder для поля даты? в данный момент выводится "дд. мм . гггг"

  16. says:

    Здравствуйте, спасибо за статью!

    А возможно ли сделать, чтобы по клику на кнопки |Добавить ПОЛЕ| или |Удалить ПОЛЕ|, выводились или удалялись новые одинаковые поля ПОЛЕ2, ПОЛЕ 3 и т. д.?

    ПОЛЕ1

    |Добавить ПОЛЕ| |Удалить ПОЛЕ|

    1. Вячеслав Скоблей says:

      Про динамичные поля в CF7 не слышал, к сожалению.

    2. says:

      Привет. Для этого есть спец. плагин - Contact Form 7 – Repeatable Fields

  17. Светлана says:

    Спасибо за статью, только нет js файла по ссылке для валидации тел. номера.

    1. Вячеслав Скоблей says:

      Исправил. Спасибо за сигнал.

  18. Алекс says:

    Всем доброго дня!
    Ребята, гуру, мастера! Помогите!
    Есть обычный сайт с CF7. Данные получаю на почту. Далее перекидаываю в локальную базу данных.
    Надо, чтобы при отправке данных формы на почту, добавлялось поле даты заполнения самой формы на сайте.
    Есть ли такая возможность в CF7? Так чтобы дата формировалась автоматом, а не вручную.

    1. Вячеслав Скоблей says:

      В шаблоне отправляемого письма, используйте следующие теги:
      [_date] - этот тег заменяется датой отправки сообщения.
      [_time] - этот тег заменяется временем отправки сообщения.

      1. Алекс says:

        Спасибо огромное :) Удачи всем!

  19. says:

    Здравствуйте! После всех этих вопросов, мне даже неловко со своим, наверно простым вопросом...) Дело в том, что чекбокс упорно не ставится в начале предложения, а где-то вверху, посередине http://joxi.ru/GrqlwE6cQn4LBA . Это в Эксплорере или если заходить анонимно. А в Гугль хроме чекбокс вообще не показывается... вот скрин. http://joxi.ru/52aXMO0U49EjWm Сам код выглядит так:
    [acceptance acceptance-571] Я прочитал и согласен с обработкой моих персональных данных в соответствие с Политикой Конфиденциальности.

    что не так? проблема с версткой? кроссбразурность? или ..

  20. Алексей says:

    Приветствую. Статья написана с душой)
    Единственно, подробно не рассказали о самой важной составляющей: "Как связать Contact form 7 c CRM системой, например с Trello".

    Ведь надо потом, обрабатывать данные из формы.

    Не подскажите, как это можно сделать?

  21. says:

    Добрый день! Подскажите пожалуйста, как сделать так чтобы сообщения проверки валидации отображались не под полеv, а над ним?? 2 дня мучаюсь) Заранее благодарен.

  22. AlexKn says:

    Здравствуйте!
    Подскажите пожалуйста как оформить форму, что бы было всего две колонки в одну строку - телефон и кнопка отправить? (с длинным текстом)
    Делаю с помощью <div class="column one-second", но первая колонка очень длинная, как уменьшить её длину?
    Помогите пожалуйста!

  23. Татьяна says:

    Здравствуйте!

    После заполнения контакной формы,
    можно показать на странице сайта имя и е-mail зарегистрированных.

  24. Добрый день! Я настроила reCAPTCHA в плагине Contact Form 7. При попытке отправить сообщение без прохождения теста капчи выводится сообщение на английском (Please verify that you are not a robot). Подскажите, можно ли сделать это сообщение на русском языке? И если можно, то как? Заранее спасибо!

  25. Павел says:

    Я думаю, что неплохо было бы настроить данный плагин таким образом, чтобы сообщение приходили на несколько электронных ящиков, а не на один. Как Вы думаете, возможно ли такое осуществить и как) Буду премного благодарен

  26. Вячеслав says:

    Здравствуйте Вячеслав! Подскажите решение задачи пожалуйста: Есть одна форма заявки, но вставить её нужно более чем на 80 разных страниц. Как сделать так, чтобы в письме, которое приходит администратору отображался заголовок страницы, с которой эту форму заполнили и отправили. Не плодя более 80 форм и не меняя в них шаблон письма под каждую. Надеюсь смог описать задачу. Заранее благодарю!

    1. Вячеслав Скоблей says:

      Используйте специальные теги CF7 https://seo-zona.ru/vse-sekrety-plagina-contact-form-7-2016-03-05.html#comment-9337 во вкладке "Письмо"

      1. Вячеслав says:

        Спасибо огромное Вячеслав! Сильно помогли!

  27. Дима says:

    Доброго времени суток, Вячеслав!
    Помогите пожалуйста! Ставлю в форму выбор из выпадающего списка (меню), всё хорошо, но когда приходит письмо с сайта, там вместо выбранного пункта этого списка только [your-subject] (((

    1. Вячеслав Скоблей says:

      Во вкладке "Шаблон формы" у вас будет шорткод списка вида:

      [select menu-701 "1" "2" "3"]

      Чтобы вы получили значение из списка в письме, во вкладке "Письмо" в "Тело письма" вы должны вызвать шорткод:

      [menu-701]
      1. Дима says:

        Да, всё верно) спасибо) не увидел сразу)

  28. Владимир says:

    Помогите пожалуйста!
    Есть
    Введите сообщение [textarea* your-message 40x12 maxlength:1000]
    Хочу проверить на наличие вставки в тексте http: и если находит то не пропускает, НО почему-то код не работает =(
    Помогите пожалуйста, думаю и для новых читателей это будет полезно знать
    Вот код в functions.php

    function custom_text_link_validation_filter($result, $tag) {
        $field_name = $tag['name'];
        if ($field_name == 'your-message') {
            $your_pregtextlink = $_POST[$field_name];
            if (preg_match("/http:/i", $your_pregtextlink) || preg_match("/https:/i", $your_pregtextlink)) {
                $result['valid'] = false;
                $result['reason'][$field_name] = 'Ссылки в сообщениях запрещены!';
            }
        }
        return $result;
    }
    
    add_filter('wpcf7_validate_text', 'custom_text_link_validation_filter', 10, 2);
    add_filter('wpcf7_validate_text*', 'custom_text_link_validation_filter', 10, 2);

    также пробовал и такой код

    function custom_text_link_validation_filter( $result, $tag ) {
        if ( 'your-message' == $tag->name ) {
            $your_pregtextlink = isset( $_POST['your-message'] ) ? trim( $_POST['your-message'] ) : '';
     
            if (preg_match("/http:/i", $your_pregtextlink) || preg_match("/https:/i", $your_pregtextlink)) {
                $result->invalidate( $tag, "Ссылки в сообщениях запрещены!" );
            }
        }
         return $result;
    }
    add_filter( 'wpcf7_validate_textarea', 'custom_text_link_validation_filter', 10, 2 );
    add_filter( 'wpcf7_validate_textarea*', 'custom_text_link_validation_filter', 10, 2 );
    1. Вячеслав Скоблей says:

      По идее, спам должен фильтроваться средствам самого WP.
      Настройки -> Обсуждение -> Чёрный список
      Можно добавить такие правила:

      [url=http://
      <a href="http://
      href=http:
      
  29. Александр says:

    Здравствуйте уважаемый автор прекраснейшего блога!
    Дополните пожалуйста статью информацией, о том, что надо добавить в functions.php , чтобы проверить своё поле для текста, на предмет есть ли там спамные ссылки содержащие кусок текста "http://" и если да то не пропускать такое сообщение.
    Заранее спасибо!

  30. Вячеслав, спасибо за статью.

    Возможно ли реализовать автоматический выбор адресата в CF7 по условию?
    Например, при заполнении формы с разных страниц сайта (или по выбору из выпадающего списка определенного значения), письмо отправляется адресату, соответствующем определенной странице (или значению из выпадающего списка):

    со страницы "x" (или значение "х" из выпадающего списка) письмо отправляется Васе
    со страницы "у" (или значение "у" из выпадающего списка) письмо отправляется Пете

    Вроде просто кажется...но пока не пойму, как это реализовать...

    1. says:

      Тоже очень интересует этот вопрос, в интернете не удалось найти решение. Если знаете, подскажите пожалуйста.

  31. Вячеслав says:

    Здравствуйте! Подскажите пожалуйста, по какой причине не может быть прикреплен и отправлен файл? Настройки все вроде верные, по началу работало все и файлы прикреплялись и уходили. А сейчас перестало крепить файлы. Просто без файлов нормально работает форма.

    1. mc says:

      Здравствуйте!
      Получилось исправить, у меня та же проблема?

    2. Вячеслав Скоблей says:

      Вполне возможно, вы прикрепляете файлы выходящие за допустимый размер. Попробуйте увеличить размер загружаемых файлов, например, так:
      [file your-file limit:10mb]

      1. says:

        Удалось только увеличив общий размер на загрузку медифайлов

  32. Валерий says:

    Здравствуйте, в как можно чтобы теме письма прописывался город, ip передается. Можно ли как-то это связать... ?

  33. Алексей says:

    Здравствуйте! Маленько не в тему (другой плагин). Не могу проставить цель в яндекс метрике на caldera forms....работал с этим плагином кто-то? Цель на нажатие кнопки отправить...

  34. Оля says:

    Добрый день, спасибо за осень полезные уроки!

    Подскажите, пожалуйста, в какое место в functions.php вставлять код для отправки смс с CF7?
    Я вставила в самый конец этот код :

    add_action( 'wpcf7_mail_sent', 'your_wpcf7_mail_sent_function' );
    function your_wpcf7_mail_sent_function( $contact_form ) {
    $title = $contact_form->title;
    $posted_data = $contact_form->posted_data;
    if ('Форма обратной связи GoodWin+' == $title ) { //замените на свое название контактной формы
    $submission = WPCF7_Submission::get_instance();
    $posted_data = $submission->get_posted_data();
    //далее мы перехватывает те поля из формы, которые хотим запихнуть в SMS
    
    $yourmessage = $posted_data['your-message']; //перехватываем поле [your-message]
    $yourname = $posted_data['your-name']; //перехватываем поле [your-name]
    $yourphone = $posted_data['tel-623'];	
    $mes = $yourphone.' '.$yourname.' '.$yourphone; //выстраиваем перехваченные переменные в одно сообщение
    
    //...здесь мы должны отправить ваше SMS, которое находится в переменной $mes
    //Вариант 1. Использование функции Email to SMS у украинского мобильного оператора Киевстар
    $mail = mail ('38096*******@sms.kyivstar.net','',$mes,"Content-type:text/plain; charset = utf-8\r\nFrom:$email");}

    Мне выдается ошибка:
    Ваши изменения в коде PHP были отменены из за ошибки на строке 141 файла wp-content/themes/astra/functions.php. Исправьте и попробуйте пересохранить.
    syntax error, unexpected end of file

    Где я допустила ошибку? Заранее спасибо за ответ!

    1. Вячеслав Скоблей says:

      Если вы вставили в конец файла, то это код должен быть до завершающего кода PHP -

      ?>

      Если у вашего файла нет окончания - ?> (а такое вполне может быть), то в вверху вашего кода напишите:

      <?php
      1. Оля says:

        Вячеслав, спасибо за ответ. Я вставила код <?php в начало своего кода, у меня снова ошибка :

        Ваши изменения в коде PHP были отменены из за ошибки на строке 123 файла wp-content/themes/astra/functions.php. Исправьте и попробуйте пересохранить.

        syntax error, unexpected '<', expecting end of file

        1. Вячеслав Скоблей says:

          В конце моего кода у вас должно быть две скобки: }}

          1. Оля says:

            Вячеслав, добрый день! Спасибо за ответ! У меня все получилось, но без кода php.
            Если использовать услугу Киевстар email to sms, то достаточно в CF7, в настройках письма вставить дополнительный электронный адрес 380*********@sms.kyivstar.net. И письмо отправляется и на почту и на смс!

            1. Вячеслав Скоблей says:

              Совершенно верно, php подключение email to sms приведен лишь для примера понимания кода.
              Если у вас серьезное мероприятие, крайне не рекомендую email to sms от Киевстара (на длительных сроках эксплуатации довольно много глюков на стороне Киевстара). Смотрите в сторону SMS шлюзов, например: https://seozona.sms.ru.
              Если у Вас будет не более 10 смс в день, этой услугой можно пользоваться практически бесплатно! Но работает она безукоризненно и молниеносно, с отчетами и т.д.

  35. Светлана says:

    Добрый день! Как сделать удаление прикрепленного файла? Например есть три поля file, все 3 юзер заполнил, т.е. прикрепил три файла, а один оказался не нужен, как его удалить?
    Спасибо.

  36. Юрий says:

    День добрый! Подскажите пожалуйста. Совместная работа таблиц table press и contact form7. Мне удалось вытягивать через запрос номер строки и номер столбца в поля формы. Но получается на каждую строку таблицы и "заказать" нужна своя форма. А как вытянуть в запросе "текущая строка" ,а номера столбцов они везде одинаковые, чтобы использовать одно всплывающее окно с одной контактной формой для всей таблицы

  37. Дмитрий says:

    Доброго дня, Вячеслав! Спасибо за материал!
    Вопрос:
    Можно ли сделать кастомный ответ после отправки формы? Т.е. в поля формы вводятся параметры, далее обсчитываем эти поля на стороне сервера каким то кастомным php и далее результат подсчета возвращаем.
    Так же как сделать, что бы после отправки значения полей не обнулялись?

  38. Иван says:

    Спасибо большое за статью, но возник вопрос! У меня есть pop ap всплывающие окно в нем форма, хотелось бы после ее заполнения, что бы в сплавало в этом же окне спасибо ваша заявка принята без перезагрузки страницы картинкой или текстом!

  39. AlexKn says:

    Здравствуйте!
    Подскажите как сделать так, что бы после отправки сообщения через форму пользователя переадресовывало на другую страницу (благодарности например), раньше делал через on_sent_ok: «», сейчас не получается…

    1. Вячеслав Скоблей says:

      Событие on_sent_ok убирают из Contact Form 7 (до конца 2017 года) насовсем (если уже не убрали из вашей версии плагина)!
      Выход пока один - костыль. Если событие выглядело ранее так (в дополнительных настройках обратной формы):

      on_sent_ok: "ga( 'send', 'event', 'Contact Form', 'submit' );"

      В файл functions.php текущей темы в самый низ добавить:

      add_action( 'wp_footer', 'mycustom_wp_footer' );
      
      function mycustom_wp_footer() {
      ?>
      <script type="text/javascript">
      document.addEventListener( 'wpcf7mailsent', function( event ) {
      ga( 'send', 'event', 'Contact Form', 'submit' );
      }, false );
      </script>
      <?php
      }

      Больше по ссылке https://contactform7.com/2017/06/07/on-sent-ok-is-deprecated/

  40. Серж says:

    Contact Form 7 безусловно хороший плагин, правда мне для нового сайта нужны были совсем уж сложные формы. Пришлось остановиться на таком плагине https://ru.wordpress.org/plugins/ucalc/ . А Contact Form продолжаю на старых сайтах использовать.

  41. Тарас says:

    Note: on_sent_ok and on_submit are deprecated and scheduled to be abolished by the end of 2017. You can use DOM events instead of these settings.

    Вот так новости :)

  42. Александр says:

    Здравствуйте, Вячеслав! Подскажите, а можно в этой форме сделать так, чтобы после регистрации пользователю на почту приходил какой-либо подарок-магнит, например, книга?

    1. Вячеслав Скоблей says:

      Александр, не совсем ясно. Это контактная форма, у нее нет регистрации. Опишите ситуацию другими словами.

      1. Александр says:

        Нам требуется сделать так: через контактную форму человек записывается на мероприятие (письмо идет к нам на почту, где даны ответы на заполненные поля). Но после того, как человек отправил письмо, нужно, чтобы он получил книгу к себе на почту. Есть что-либо подобное в этой форме (или может плагины дополнительные для нее)? Я пересмотрел все, что имеется в каталоге плагинов для этой формы, но ничего похожего не нашел. И в настройках формы тоже... Может быть вы что-нибудь подобное видели?

        1. Вячеслав Скоблей says:

          По сути Вам нужен автоответчик? В настройках формы во вкладке "Письмо" активируйте пункт "Использовать почту (2)". В настройках поля "Кому" укажите тег адреса заполнившего форму (по умолчанию [your-email]) и все другие необходимые поля.
          Это письмо (номер 2) будет отправлено заполнившему анкету сразу же после отправки письма 1 ("Автоответчик").
          Там же есть пункт "Прикреплённые файлы" - если почитаете в документации, возможно в нем возможно прикрепить файл к письму. Если нет, как вариант, вставлять в письмо автоответчика ссылку на файл в облаке.

          1. Александр says:

            Спасибо, Вячеслав! Действительно, все просто оказалось!
            Все работает! Еще раз благодарю!

            1. Алексей says:

              Подскажите, пожалуйста, как вы вышли из ситуации? Нам надо по кнопке записаться крепить программу мероприятия и отправлять записанному.

  43. Юрий says:

    День добрый ! Спасибо за статью. Подскажите как реализовать если вставляешь две даты "заезд" " выезд" , чтобы "выезд" при заполнении не мог быть меньше заезда

  44. Александр says:

    Здравствуйте. Мне нужно сделать форму, после заполнения которой на странице "спасибо" будет указано имя введённое в форме. Возможно ли это? заранее спасибо

  45. Гудвин says:

    В последнее время стал замечать, что при нажатии на отправку в плагине, крутится лоадер, но ничего не происходит. Крутится до бесконечности. Как исправить проблему?

    1. Вячеслав Скоблей says:

      Уточните, с переездом на версию Вордпресс 4.8 ?

      1. Гудвин says:

        Не переезжал, только настраиваю сайт. Но да, всё верно, стоит версия WP 4.8

  46. Дмитрий says:

    У меня возникла трудностей с Передача Get-запросов в форму Contact Form 7, использую тему Avada. Страница заканчивается не на .htm, а просто /contact/
    Думаю поэтому не передаёт информацию о предыдущей странице. Подскажите пожалуйста как изменится код если страница /contact/?

    1. Вячеслав Скоблей says:

      Никак не изменится. Так и останется:
      /contact/?vrach=фамилия врача
      Обратите внимание, что запрос передается в скрытом поле:

      <input type="hidden" name="' . $name . '" value="'. $_GET[$name] . '" />

      Чтобы проверить передачу запроса, сделайте поле видимым:

      <input type="text" name="' . $name . '" value="'. $_GET[$name] . '" />

      Также не забывайте, что в форме должен быть тег

      [getzapros vrach]

      а сама форма размещена на странице куда вы передаете запрос

      1. Дмитрий says:

        Что-то у меня не работает, наверно не так понял. Рядом с фамилией ссылка с окончанием ?vrach=фамилия врача, далее переходишь по этой ссылке на страницу с формой, в форме оправляешь данные. Данными приходят на почту и в письме указана фамилия врача.
        Сделал по шагам:
        1. В форме во вкладке письмо, в поле тело письма указал [getzapros vrach]
        2. В functions.php темы добавил:

        wpcf7_add_shortcode('getzapros', 'wpcf7_getzapros_shortcode_handler', true);
        function wpcf7_getzapros_shortcode_handler($tag) {
        if (!is_array($tag)) return '';
        $name = $tag['name'];
        if ($_GET[$name]=='') {
        $html = '';
        }
        else
        {
        $html = '<input type="hidden" name="' . $name . '" value="'. $_GET[$name] . '" />';
        }
        return $html;
        }

        3. Сделал ссылку /contact/?vrach=фамилия врача

        Подскажите пожалуйста где ошибся или может не так понял как это работает?
        это в саму форму прописать или в functions.php

        1. Вячеслав Скоблей says:

          Все верно, кроме одного пункта:
          В конструкторе ContactForm7 во вкладке "Шаблон формы" добавляем в любое место

          [getparam vrach]

          А во вкладке "Письмо" (там где хотите получить фамилию):

          [vrach]
  47. Вячеслав says:

    Здравствуйте! ПОМОГИТЕ! Подскажите, пожалуйста, как вставить свою "картинку-кнопку" вместо кнопки "Обзор...", с помощью которой нужно прикреплять файлы. Хочу вместо стандартной кнопки поставить иконку папки. Заранее благодарю!

    1. Вячеслав Скоблей says:

      Отсылаю вас к этой англоязычной статье https://www.quirksmode.org/dom/inputfile.html
      так как это не относится к Contact Form 7, а к особенностям браузеров.

      1. Вячеслав says:

        Вячеслав, спасибо за подсказку! Но для меня это не решение проблемы, т.к. я во первых не силен в английском, а во вторых, из того что там обсуждается, я понял, что это немного не то что я хочу. В любом случае спасибо за уделенное время! Удачи!

        1. Вячеслав Скоблей says:

          Это как раз то, что вам нужно :)
          Поскольку это системная кнопка браузеров, то вот так просто не возьмете и не замените ее!
          В статье как раз описаны некоторые костыли, которые впрочем не решают (и не могут решать) поставленной вами задачи.

          1. Вячеслав says:

            Понял Вячеслав, спасибо! А Вы не знаете плагина форм, в котором можно реализовать то, что я хочу? Буду Вам признателен за подсказку!:)

            1. Вячеслав Скоблей says:

              Плагина не знаю, но встречал велосипед
              https://habrahabr.ru/post/245689/

              1. Вячеслав Скоблей says:

                Кстати, поигрался, при некоторой сноровке, можно обмануть браузер и подложить свою кнопку.
                Вот как это сделать для кнопки "Выберите файл" в CF7.

                В конструкторе формы создайте и добавьте поле "ФАЙЛ", пропишите для него название стиля. Получится приблизительно так:

                [file file-217 class:hiddebutton]

                Теперь вверху этого поля добавим:

                <label for="uploadbtn" class="uploadButton">Загрузить файл</label>

                В итоге получится так:

                <label for="uploadbtn" class="uploadButton">Загрузить файл</label>
                [file file-217 class:hiddebutton]

                Теперь можем задавать свои стили для кнопки

                <style>
                .hiddebutton { //для начала сделаем прозрачной основную кнопку
                opacity: 0; z-index: -1;
                }
                .uploadButton {//потом рисуем свою, в качестве фона можно попробовать загрузить картинку
                display: block;
                width: 200px;
                background: #5a5b5c;
                padding: 10px;
                color: #FFFFFF;
                text-align: center;
                border-radius: 15px;
                font-size: 18px;
                font-weight: bold;
                font-family: Tahoma;
                cursor: pointer;
                }
                .uploadButton:hover {
                background: #5a5b52;
                }
                </style>
                1. Вячеслав says:

                  Спасибо большое, Вячеслав, за помощь, доберусь до дома, обязательно попробую. И отпишусь конечно о результатах!)) Хорошего дня Вам!

                  1. Вячеслав says:

                    Здравствуйте, Вячеслав! Попробовал предложенный Вами метод, но ничего не выходит, эта кнопка стандартная все равно появляется под вновь созданной. Пробовал подключать стили и в файле стилей темы и в файле стилей самого плагина. http://prntscr.com/f80q0o
                    Видать не судьба!(( В любом случае спасибо за советы! Удачи!

                    1. Вячеслав Скоблей says:

                      1. Вы должны удостовериться, что в конструкторе прописалось к кнопке: class:hiddebutton
                      2. В стилях также попробуйте заменить:

                      .hiddebutton {
                      opacity: 0; z-index: -1;
                      } 

                      на

                      .hiddebutton {
                      opacity: 0; z-index: -1 !important;
                      }

                      3. Проверьте в разных браузерах отображение, на кроссбраузерность я не делал тесты.

    2. Дмитрий says:

      Классно, всё работает, спасибо большое!

  48. Дмитрий says:

    Подскажите пожалуйста...в контактной форме, подключил яндекс метрику, перестало выводиться уведомление, что вы подписались. Убираю метрику, сообщение выводится. Как сделать так чтобы и метрика была и сообщение выводилось и в идеале через 3 секунды форма закрывалась

  49. Приветствую! подскажите как в выпадающем меню сделать слова(например - сделайте выбор) вместо черточек?

    1. Вячеслав Скоблей says:

      В настройках формы в свойствах select вы можете убрать галочку "Вставьте пустой пункт в качестве первого варианта", тогда будет назначен первый вариант из списка (иногда полезно). Если требуется все же оставить выбор за пользователем, слова "Сделайте выбор" можно вставить в файле:

      wp-content/plugins/contact-form-7/modules/select.php

      в строчке:

      array_unshift( $labels, '---' );
    2. я нашел универсальное решение

      [select* menu-207 first_as_label "Выберите преподавателя" "Лариса Теркина" "Андрей Мишин"]
      1. и хорошо проходит проверку на important

  50. Den says:

    Здравствуйте.
    Подскажите, а задача такая.
    Необходимо заполнить форму на сайте и передать введенные данные методом пост на http://api.************.ru/index.php
    Возможно ли такое реализовать с помощью CF7?

    1. Вячеслав Скоблей says:

      Den, перехват данных из формы CF7 описан здесь - https://seo-zona.ru/vse-sekrety-plagina-contact-form-7-2016-03-05.html#_SMS_Contact_Form_7
      Далее, дело техники: отправляйте данные полей куда душе угодно!

  51. Моника says:

    Здравствуйте.
    Сайт имеет 3 языка: русский, английский, польский.
    Перевод основного содержания происходит вручную с пмощью плагина WP Globus
    Подскажите, пожалуйста, как сделать переводы на английский и польский текста полей и placeholder в Contact Form 7 ?
    Ваше имя*[text* your-name placeholder "Ваше имя*"]
    Ваш телефон* [tel* tel-832 placeholder "Ваш телефон*"]
    Сообщение [textarea your-message placeholder "Сообщение"]
    [submit "Отправить"]
    Если ли такая возможность? Или какие альтернативы?

    1. Вячеслав Скоблей says:

      К сожалению, я не знаком со спецификой работы плагина WPGlobus. Но если у вас создаются отдельные страницы, вы можете создать разные формы на разных языках.

      1. Моника says:

        Задача была поставлена: В шапке сайта по клику на кнопку-картинку на каждой языковой версии (Русский, Английский, Польский), во всплывающем окне должна появляться контактная форма со своими полями и соответствующим текстом (placeholder) в них.
        Решение.
        Создать 3 формы в ContactForm7 для каждого языка свою.
        плагин Easy FancyBox не хотел работать (ошибок в консоли нет), поэтому сработали стандартные средства:
        style.css

        .modalDialog {
        	position: fixed;
        	font-family: Arial, Helvetica, sans-serif;
        	top: 0;
        	right: 0;
        	bottom: 0;
        	left: 0;
        	background: rgba(0,0,0,0.8);
        	z-index: 99999;
        	-webkit-transition: opacity 400ms ease-in;
        	-moz-transition: opacity 400ms ease-in;
        	transition: opacity 400ms ease-in;
        	display: none;
        	pointer-events: none;
        }
        .modalDialog:target {
        	display: block;
        	pointer-events: auto;
        }
        .modalDialog > div {
        	width: 400px;
        	position: relative;
        	margin: 5% auto;
        	padding: 5px 20px 13px 20px;
        	border-radius: 10px;
        	background: #fff;
        	background: -moz-linear-gradient(#fff, #999);
        	background: -webkit-linear-gradient(#fff, #999);
        	background: -o-linear-gradient(#fff, #999);
        }
        .close {
        	background: #606061;
        	color: #FFFFFF;
        	line-height: 25px;
        	position: absolute;
        	right: -12px;
        	text-align: center;
        	top: -10px;
        	width: 24px;
        	text-decoration: none;
        	font-weight: bold;
        	-webkit-border-radius: 12px;
        	-moz-border-radius: 12px;
        	border-radius: 12px;
        	-moz-box-shadow: 1px 1px 3px #000;
        	-webkit-box-shadow: 1px 1px 3px #000;
        	box-shadow: 1px 1px 3px #000;
        }
        .close:hover { background: #00d9ff; }

        Код в header.php темы у нужное место:

        <?php
        $my_local = get_locale(); 
        if ($my_local=='ru_RU') {
               echo "<a href='#openModal' class='fancybox zakaz'> <img class='buttonz' title='' alt=' Контактная форма ' src='http://site.net/wp-content/uploads/2017/02/buttonz.png'></a><div id='openModal' class='modalDialog'>
        <div id='contact_form_pop'><a href='#close' title='Закрыть' class='close'>X</a>"; 
             echo do_shortcode( '[contact-form-7 id="86" title="Контактная форма 1"]' );         
        echo "</div>
        </div>";
        };
        if ($my_local=='en_US') {
               echo "<a href='#openModal' class='fancybox zakaz'> <img class='buttonz' title='' alt=' Сontact form ' src='http://site.net/wp-content/uploads/2017/02/buttonzus.png'></a><div id='openModal' class='modalDialog'>
        <div id='contact_form_pop'><a href='#close' title='Закрыть' class='close'>X</a>"; 
         echo do_shortcode( '[contact-form-7 id="160" title="Контактная форма 2 EN"]' );           
        echo "</div>
        </div>";
        };
        if ($my_local=='pl_PL') {
               echo "<a href='#openModal' class='fancybox zakaz'> <img class='buttonz' title='' alt=' Formularz kontaktowy ' src='http://site.net/wp-content/uploads/2017/02/buttonzpl.png'></a>
                        <div id='openModal' class='modalDialog'>
        <div id='contact_form_pop'><a href='#close' title='Закрыть' class='close'>X</a>";  
        echo do_shortcode( '[contact-form-7 id="161" title="Контактная форма 2 PL"]' );            
        echo "</div>
        </div>";
        }; ?>

        И все работает. Надеюсь, кому-нибудь еще пригодиться. (код никак не связан с тем, какой вы используете плагин для мультиязычности, проверяем лишь текущую локаль (индекс языка сайта)

        1. Вячеслав Скоблей says:

          Моника, чудесное решение! Остается добавить, что оно базируется на глобальной переменной - get_locale();
          Эта переменная используется плагинами перевода для перевода индекса языка сайта, поэтому можно плясать от нее (проверять наличии того или иного языка), как в указанном примере.

  52. says:

    Благодарю, много читал, а здесь захотел оставить отзыв. Лично мне помогла информация, спасибо автору. Оставил вызов кода на одной странице)))

  53. Petr says:

    Можно ли contact form 7 интегрировать в html сайт и как?

    1. Вячеслав Скоблей says:

      Нельзя. Плагин использует архитектуру wordpress

      1. Petr says:

        Я думаю что можно...

        stackoverflow.com/questions/18339500/how-to-use-wordpress-contact-form-7-in-my-own-html

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

  54. Александр says:

    Приветствую! а можно реализовать так, что бы сообщение об успешной отправке показалось в модальном окне?

    1. Иван says:

      Можно, сто раз так делал)

  55. Артём says:

    У меня есть блок каталог, в нём 6 товаров. Форма для этих товар всплывающая, она одна и та же на каждом из 6 товаров. Товары выведены постами. Как сделать что бы в письме приходило название товара, которое берется из заголовка поста. [post_title] отправляет один и тот же заголовок

    1. Вячеслав Скоблей says:

      Есть специальные теги в Contact Form 7, которые можно вставлять в форму письма, например:

      [_post_id] Этот тег будет заменен на ID поста, который содержит контактную форму.
      [_post_name] Этот тег будет заменен именем поста, который содержит контактную форму.
      [_post_title] Этот тег будет заменен на заголовок сообщения, который содержит контактную форму.
      [_post_url] Этот тег будет заменен на постоянную ссылку на пост, который содержит контактную форму.
      
    2. Анна says:

      Да, у меня такая же проблема, [_post_title] не работает, т.к. идет вывод не отдельного поста на странице, а все посты на одной (как обычная блоговая система). И при всплывающем попапе с формой отправляется название самой страницы, на которой размещены посты, а не название товара (заголовка поста). Подскажите, пожалуйста, как можно реализовать именно отправку title поста, на котором вызывается попап с формой.

    3. Роман says:

      Не получается при всплывающем popup в форму подставить текст с заказа (4 предложения заказа на странице)
      title подтягивается,но titlle страницы на которой размещены заказы,
      как подтянуть id или class , каждого из предложных заказов
      [dynamictext dynamictext-zakaz"CF7_get_post_var key='здесь подставляю id или class"] но такой вариант не работает
      Подскажите правильность написания шорткода.

      1. Марина says:

        Тоже долго искала вариант реализации :) Нашла. Может кому понадобится.
        1. В форме создать поле

        [text model id:model class:hidden readonly]

        скрыть поле в форме можно через стиль .hidden{display:none;}
        В письме для отправки используется тег [model]
        2. Для кнопки или ссылки на форму прописать

        onclick="javascript:document.getElementById('model').value='передаваемое значение'" 

        Пример:

        onclick="javascript:document.getElementById('model').value=''»" href="»#»" class="»form-popap»" rel="nofollow">Отправить

        p.s. model можно заменить на что угодно

  56. Владимир says:

    У меня ещё появился один вопрос. Я сделал две кнопки на сайте. Одну на всех страницах(обратный звонок), а вторую только на страницах товара(купить в один клик). Так вот хочу, чтобы с одной кнопки отправлялось одно сообщение, а с другой кнопки другое. Вот мой код. Думал так прокатит, а в итоге даже сайт не грузится

    /*отправка смс купить в один клик*/
    add_action( 'wpcf7_mail_sent', 'your_wpcf7_mail_sent_function' );
    function your_wpcf7_mail_sent_function( $contact_form ) {
    $title = $contact_form->title;
    $posted_data = $contact_form->posted_data;
    if ('sms_contact_copy' == $title ) { //замените на свое название контактной формы
    $submission = WPCF7_Submission::get_instance();
    $posted_data = $submission->get_posted_data();
    //далее мы перехватывает те поля из формы, которые хотим запихнуть в SMS
    $yourphone = $posted_data['tel-200']; //перехватываем поле [your-message]
    $yourname = $posted_data['your-name']; //перехватываем поле [your-name]
    $tovar = $posted_data['dynamichidden-455'];
    $mes ='Заказ: '.$tovar.' '.$yourphone.' '.$yourname; //выстраиваем перехваченные переменные в одно сообщение
    
    $sms = str_replace(' ','+', $mes);
    $idapi = "636FEDFE-CC06-7C16-A96D-3C00DCAE9B8D"; //уникальный api_id, выдается после регистрации 
    $nomer ="+37529xxxxxxx"; //телефон получателя
    $urlsms="http://sms.ru/sms/send?api_id=$idapi&to=$nomer&text=$sms";
    $body=file_get_contents($urlsms);
    }
    }
    /*конец*/
    /*отправка смс обратный звонок*/
    add_action( 'wpcf7_mail_sent', 'your_wpcf7_mail_sent_function' );
    function your_wpcf7_mail_sent_function( $contact_form ) {
    $title = $contact_form->title;
    $posted_data = $contact_form->posted_data;
    if ('sms_contact' == $title ) { //замените на свое название контактной формы
    $submission = WPCF7_Submission::get_instance();
    $posted_data = $submission->get_posted_data();
    //далее мы перехватывает те поля из формы, которые хотим запихнуть в SMS
    $yourphone = $posted_data['tel-200']; //перехватываем поле [your-message]
    $yourname = $posted_data['your-name']; //перехватываем поле [your-name]
    $mes ='Заказан обратный звонок '.$yourphone.' '.$yourname; //выстраиваем перехваченные переменные в одно сообщение
    	
    $sms = str_replace(' ','+', $mes);
    $idapi = "636FEDFE-CC06-7C16-A96D-3C00DCAE9B8D"; //уникальный api_id, выдается после регистрации 
    $nomer ="+37529xxxxxxx"; //телефон получателя
    $urlsms="http://sms.ru/sms/send?api_id=$idapi&to=$nomer&text=$sms";
    $body=file_get_contents($urlsms);
    }
    }
    1. денис says:

      спасибо!!!! помогло только ваше решение! Гениально и просто.

  57. Владимир says:

    А у меня в этой строчке
    $idapi = 00000-0000-0000-000 //уникальный api_id
    почему-то ошибка, ругается на это уникальный api_id. Пробовал его изменить на другой, но всё равно не помогло. Что мне делать?
    Спасибо.

    1. Вячеслав Скоблей says:

      Уникальный api_id, выдается после регистрации в сервисе http://seozona.sms.ru и служит вашим ключем к данным вашего кабинета.

      1. Владимир says:

        Я брал этот уникальный api_id с сайта http://seozona.sms.ru в личном кабинете.

        1. Вячеслав Скоблей says:

          Владимир, попробуйте переменную в кавычках, вот так:

          $idapi = "00000-0000-0000-000";
          1. Владимир says:

            Огромное Вам спасибо! Всё заработало)

  58. Григорий Скобло says:

    Вячеслав, подскажите можно ли реализовать с этим плагином такой кейс:
    1. на стр1 пользователь заполняет форму и жмет сабмит
    2. переадресация на стр2 (это работает через доп настройки)
    3. на стр2 отображаются все данные которые вводились на стр1 или даже целиком письмо которое уходит на почту (собственно задача связана с тем что почту сейчас открывают нерегулярно и многие такие автописьма попадают в спам). Пока что не понял как собрать эти данные из формы и вывести их..
    Спасибо

    1. Вячеслав Скоблей says:

      Понятия не имею, зачем вам это надо, но даю подсказку, как это сделать. Добавляем в файл functions.php код, который сработает после отправки данных с формы и перехватит посланные данные:

      add_action( 'wpcf7_mail_sent', 'your_wpcf7_mail_sent_function' );
      function your_wpcf7_mail_sent_function( $contact_form ) {
      $title = $contact_form->title;
      $posted_data = $contact_form->posted_data;
      if ('Контактная форма 1' == $title ) { //название вашей контактной формы
      $submission = WPCF7_Submission::get_instance();
      $posted_data = $submission->get_posted_data();
      //your-name и your-tel далее - поля форм, которые мы перехватываем из Contact Form 7
      $yourphone = $posted_data['your-name'];
      $yourdate = $posted_data['your-tel'];
      //переменные вы получили, теперь отправляйте их на нужную вам страницу, методом POST или GET
      }
      }
      
      1. Григорий Скобло says:

        Спасибо, попробую..

  59. привет. уже много лет использую этот плагин и впервые столкнулся с такой проблемой - прелоадер крутит бесконечно, сообщение об успешной отправке не появляется, но сообщения на почту приходят в считанные секунды. как исправить ситуацию?

  60. says:

    Узнала много нового о Contact Form 7. Интересная статья. Искала информацию, как публиковать на сайте заявки, собранные плагином. У Вас случайно нет статьи на эту тему? Предполагаю, с помощью Contact Form DB

    1. Вячеслав Скоблей says:

      Позвольте поинтересоваться, зачем? Если у вас кулинарный сайт, и вы, как я предполагаю, решили сделать что-то типа "Поделиться рецептом"?

      1. says:

        )))))) Хочу сделать что- то вроде биржи, однозначно без рецептов)

        1. Вячеслав Скоблей says:

          Если вам нужно публиковать данные с форм прямо на сайт (в записи, на страницы), то Contact Form 7 не совсем правильный выбор.

          1. Евгений says:

            А каким плагином можно сделать следующее:
            пользователь в реальном времени сам добавляет на страницу запись, что то коментов, но как отдельное сообщее.

            1. Вячеслав Скоблей says:

              Плагин User Submitted Posts

  61. Сергей says:

    Привет, пытался сделать по примеру "Передача Get-запросов в форму Contact Form 7" но к сожалению ничего не получилось, при передаче в ссылки ничего не происходит, я так понимаю нужно CF7 правильно настроить, но если честно не совсем понимаю как. Не могли бы Вы подробнее объяснить настройки, или доп урок сделать, был бы очень Вам благодарен.

    P.S. пытаюсь с помощью данной формы сделат аналогично как здесь gaz-time .ua/stoimost , грубо говоря нужно в post передать имя, тел, имя заказа, цену и отправить на Email, как думаешь возможно аналогично сделать с помощью данной формы или можешь посоветовать как данное чудо реализовать, возможно есть урок?

    1. Вячеслав Скоблей says:

      Ничего сложного и нет: 1) прописываете шорткод в конструкторе форм. 2) пишите обработчик шорткода в functions.php. 3) отправляете данные в get: /contact.htm?vrach=Иванова (больше никаких настроек).

    2. says:

      А что лучше выбрать?

      1. Вячеслав Скоблей says:

        Возможность публиковать на вашем сайте WordPress пользователям может дать, например, плагин User Submitted Posts. Он не такой гибкий, как конструктор Contact Form 7, но с его помощью можно решить множество простых задач.

        1. says:

          Спасибо за помощь, Вячеслав

  62. Евгений says:

    Отличная статья, очень помогла - спасибо.
    А можно ли настроить в в форме обратной связи чтобы в письме (которое отправится мне, отображалась ссылка на страницу в которой было отправлено сообщение).
    К примеру: на одной из страниц сайт по форме обратной связи мне отправили сообщение. На почту ко мне пришло:
    Телефон пользователя: +1234567890.
    Почтовый ящик: аааа@gmail.com.
    Страница обращения:
    И вот в строке "страница обращения" отображалась страница сайта с которого было отправлено сообщение.
    В шаблоне формы я написал скрипт:

    	$('#toggle_gift_form').click(function( event ) {
    		$('#gift_div').toggle();
                    document.getElementById("link2page").value = document.URL;
                    console.log(document.getElementById("link2page").value);
                    document.getElementById("pageTitle").value = document.title;
    		event.preventDefault();
    	});

    Во вкладке письмо в разделе тема письма прописал помимо прочего вот это:
    Страница обращения: [link2page].

    Но мне всё равно ссылка не прописывается:
    Телефон пользователя: +1234567890.
    Почтовый ящик: аааа@gmail.com.
    Страница обращения: [link2page]

    Не подскажите что делать?
    Спасибо вам большое!

    1. Вячеслав Скоблей says:

      Если говорить о готовом решении, то есть дополнительный плагин - Contact Form 7 Modules
      С его помощью можно вставлять в ваши контактные формы скрытые поля (hidden fields), в том числе и информацию о странице, на которой была заполнена контактная форма.

      1. Евгений says:

        Что то не выходит у меня? Как правильно настроить hidden ,что бы в письме отображалась страница, с которой было отправлено сообщение.
        Телефон пользователя: +1234567890.
        Почтовый ящик: аааа@gmail.com.
        Страница обращения:

        Спасибо Вам огромное

        1. Вячеслав Скоблей says:

          1. Устанавливаете плагин.
          2. В шаблон формы прописываете: [hidden hidden-57 "post_url"]
          3. В шаблон письма вставляете: Страница обращения: [hidden-57]

  63. Вывела форму в footer, но не срабатало. Формы нет. Только код.

    1. Вячеслав Скоблей says:

      Если вы вставляли код контактной формы непосредственно в php файл footer.php, то вы должны использовать шорткод: http://seo-zona.ru/vse-sekrety-plagina-contact-form-7-2016-03-05.html#Contact_Form_7-2 (смотрите пример по ссылке)

  64. Валя says:

    В какую директорию вставлять js для валидации телефонного номера?

    1. Вячеслав Скоблей says:

      Скачайте предложенный js файл к себе на сайт в КАКУЮ ХОТИТЕ директорию. В шаблоне сайте подключите по принципу:

      < script type='text/javascript' src='http://ваш_сайт.ru/КАКАЯ_ХОТИТЕ_ДИРЕКТОРИЯ/jquery.maskedinput.js'>
    2. Дело в том, что я так и сделала. poehalisnami.travel/
      В футере

      1. Вячеслав Скоблей says:

        Светлана, уточните, вы код прописали в файле footer.php вашей темы или в виджете? Если в виджете, ваш код не будет работать. Вы должны его прописать в файле footer.php, в том месте где у вас вызывается виджет.

  65. Роман says:

    Здравствуйте, Вячеслав.

    Подскажите пожалуйста, как можно ограничить высоту поля выпадающего списка?
    Сейчас по умолчанию выводится 20 строчек (наименований) из 30 + ползунок.
    Мне хотелось бы сделать чтобы выводилось 5-7 + ползунок.

    Уже больше дня не могу найти нужный кусок кода =(

    Заранее благодарю за помощь!

    1. Вячеслав Скоблей says:

      У элемента < select > есть атрибут size. Используется так:

      ...select name="select" size="3">

      К сожалению, в документации http://contactform7.com/checkboxes-radio-buttons-and-menus/ ничего не говорится о возможности его использования.
      Выхода вижу 2.
      Первый:
      - Добавить принудительно size="3" в вывод select (где-то в плагине)
      Второй:
      - использовать стили:
      в редакторе формы

      [select menu-123 class:drop1...

      В CSS темы:

      .drop1{
      height:65px;
      }
  66. says:

    Здравствуйте
    мне нужно убрать анимацию возле кнопки субмит(когда нажимаешь кномпу справа вылазет анимацыя прогрузкы 2 крутящыеся стрелкы)

    1. Вячеслав Скоблей says:

      Василий, просто добавьте в стили:

      div.wpcf7 img.ajax-loader {
          visibility: hidden !important;
      }
    2. Роман says:

      Не совсем понял на счет первого способа.
      Второй не совсем то, что нужно делает. Он увеличивает изначальное поле, а не выпадающее.

      Возможно я не совсем корректно описал.
      Когда нажимаешь на поле списка, вниз выдвигается поле с 20 строчками(записями) и это поле листается. Вот именно то поле которое выдвигается мне и нужно уменьшить.

  67. Дмитрий says:

    Здравия!
    Пишу в коментах очень редко, здесь не удержался...
    Огромное спасибо за статью!!!

  68. Дмитрий says:

    Привет! Сделал отправку смс описанный в данной статье и столкнулся с проблемой! Смс отправляются успешно, а письма на почту не приходят. После подтверждения отправки на сайте не выводит окно об успешной отправке, просто ничего не происходит и не обновляется форма, а смс уходит... В чем может быть проблема, не подскажите?

    1. Вячеслав Скоблей says:

      Попробуйте методом тыка - убрать код из functions.php: отправка письма работает? Если работает, значит ошибка в коде functions.php. Пересмотрите синтаксис.

  69. Тимур says:

    Доброго времени суток! Попытался сделать валидацию телефонного номера. Не работает. Более того, сайт слетает полностью. В чём может быть ошибка?

    1. Вячеслав Скоблей says:

      Если вы редактировали файл functions.php, то здесь есть 2 самые распространенные ошибки:

      • 1. Файл нужно сохранять в кодировке UTF-8 (без BOM)
      • 2. PHP код должен быть вставлен после
      1. Тимур says:

        Спасибо большое за ответ и статью! Всё работает. Проблема была из-за собственной невнимательности - неверно выбрал директорию при заливке js файла.

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

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