Всплывающее окно с формой обратной связи

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

По идее, оно должно появляться при нажатии на кнопку, чтобы создался эффект всплывающего окна с формой обратной связи. Форму будем создавать с помощью всем известного плагина «Contact Forms 7». Добавим свои стили к форме, оформим красиво. В общем, сделаем как надо.

Всплывающее окно с формой обратной связи

Демо Скачать

В работе над модальным окном я воспользуюсь свободным плагином «Modal Window Effects» (демо). Вы же можете использовать любой другой (даже специальный) плагин окна для WordPress. Надо лишь привязать вызов к нашей кнопке, и все будет в ажуре. Поехали!

Кнопка со сплывающим окном обратной связи

Первым делом займемся установкой на сайт кнопки с окном, и уже потом перейдем к форме связи. Сложного в этом ничего нет. Из архива, скаченного выше по ссылке, нужно подключить три файла: два файла из папки «modal — JS» и один из папки «modal — CSS». Все они относятся к модальному окну, это для ясности.

Открываем файл functions.php и в конце перед знаком ?> (или там, где вам удобнее) подключаем файлы таким образом:

function my_scripts_method() {
        // модельное окно
        wp_enqueue_script( 'mod-scripts', get_template_directory_uri() . '/modal/js/classie.js', array(), null, true);
        wp_enqueue_script( 'modef-scripts', get_template_directory_uri() . '/modal/js/modalEffects.js', array(), null, true);
        
}
add_action( 'wp_enqueue_scripts', 'my_scripts_method' );
/* стили модального окна */
function wpdocs_theme_name_scripts() {
    wp_enqueue_style( 'style-mod', get_template_directory_uri() . '/modal/css/component.css');
}
add_action( 'wp_enqueue_scripts', 'wpdocs_theme_name_scripts' );

Теперь открываем файл style.css и добавляем еще такой код (это стили кнопки):

/*кнопка обратной связи*/
.email-bt {
    background: #F95C18;
    border-radius: 50%;
    box-shadow: 0 8px 10px rgba(249, 92, 24, 0.3);
    cursor: pointer;
    border: 2px solid transparent;
    display: block;
    height: 75px;
    width: 75px;
    text-align: center;
    position: fixed;
    left: 8%;
    bottom: 18%;
    z-index: 999;
    transition: .3s ease-in-out;
    -webkit-animation: email-an linear 1s infinite;
    animation: email-an linear 1s infinite;
}

.email-bt:hover {
    background: #fff;
    border: 2px solid #F95C18;
}

.email-bt .text-call {
    height: 75px;
    width: 75px;
    border-radius: 50%;
    position: relative;
}

.email-bt .text-call:after {
    content: "\f0e0";
    display: block;
    font-family: fontawesome;
    color: #fff;
    font-size: 34px;
    line-height: 75px;
    height: 75px;
    width: 75px;
    opacity: 1;
    transition: .3s ease-in-out;
    -webkit-animation: opsimple 3s infinite;
    animation: opsimple 3s infinite;
}

.email-bt .text-call:hover:after {
    opacity: 0;
}

.email-bt .text-call span {
    color: #F95C18;
    display: block;
    left: 50%;
    top: 50%;
    position: absolute;
    transform: translate(-50%, -50%);
    z-index: 1;
    opacity: 0;
    font-size: 11px;
    line-height: 12px;
    font-weight: 600;
    text-transform: uppercase;
    transition: .3s ease-in-out;
    font-family: 'montserrat', Arial, Helvetica, sans-serif;
}

.email-bt .text-call:hover span {
    opacity: 1;
}

@keyframes email-an {
    0% {
        box-shadow: 0 8px 10px rgba(249, 92, 24, 0.3), 0 0 0 0 rgba(249, 92, 24, 0.2), 0 0 0 0 rgba(249, 92, 24, 0.2)
    }

    40% {
        box-shadow: 0 8px 10px rgba(249, 92, 24, 0.3), 0 0 0 15px rgba(249, 92, 24, 0.2), 0 0 0 0 rgba(249, 92, 24, 0.2)
    }

    80% {
        box-shadow: 0 8px 10px rgba(249, 92, 24, 0.3), 0 0 0 30px rgba(249, 92, 24, 0), 0 0 0 26.7px rgba(249, 92, 24, 0.067)
    }

    100% {
        box-shadow: 0 8px 10px rgba(249, 92, 24, 0.3), 0 0 0 30px rgba(249, 92, 24, 0), 0 0 0 40px rgba(249, 92, 24, 0.0)
    }
}

@keyframes opsimple {
    0% {
        opacity: 0;
        transform: rotate(0deg);
    }

    40% {
        opacity: 1;
    }

    80% {
        opacity: 1;
    }

    100% {
        opacity: 0;
        transform: rotate(360deg);
    }
}
/* конец кнопки звязи */

Осталось вывести разметку.

Открываем файл footer.php и перед функцией <?php wp_footer(); ?> вставляем HTML-разметку. На этом этапе у вас должна получиться плавающая кнопка на странице, по нажатию которой появляется всплывающее окно (пока что пустое).

<div class="email-bt md-trigger" data-modal="modal-9">
    <div class="text-call">
        <span>Обратная<br>связь</span>
    </div>
</div>
<div class="md-modal md-effect-9" id="modal-9">
        <div class="md-content">
                <h3>Обратная связь</h3>
                        <div>
                 <!-- сюда вставить функцию вызова формы связи (шорткод) -->
                        </div>
        </div>
</div>
<div class="md-overlay"></div>

Форма связи

Ну вот, дошли до последней части «урока».

Думаю, плагином «Contact Forms 7» все умеют пользоваться. После того, как в нем создадите новую форму, вместо стандартного кода, что образовывается по умолчанию, добавьте этот:

<label>[text* your-name placeholder "Как к Вам обращаться *"]</label>
<label>[email* your-email placeholder "Ваш e-mail *"]</label>
<label>[textarea your-message placeholder "Сообщение..."]</label>
[submit "Отправить"]

Теперь выводим форму в разметке выше в указанном там месте:

<?php echo do_shortcode( 'тут шорткод формы' ); ?>

Стили оформления, по идее, должны подхватиться из вашей текущей WordPress темы, но можно прописать свои. В файл style.css прописываем такой код:

/*форма связи в модальном окне */

#wpcf7-f2400-o1 form {
    margin-left:auto;
    margin-right:auto;
}

#wpcf7-f2400-o1 input, #wpcf7-f2400-o1 textarea {
         box-sizing: border-box;
        -webkit-box-sizing: border-box;
        -moz-box-sizing: border-box;
        -o-box-sizing: border-box;
}

#wpcf7-f2400-o1 textarea{
        background: rgba(0, 0, 0, 0.1);
    width: 100%;
    height: 110px;
    border: 1px solid rgba(255,255,255,.6);
    border-radius: 2px;
    display:block;
    font-family: 'Source Sans Pro', sans-serif;
    font-size:15px;
    color:#444;
    padding:20px;
    margin-bottom:20px;
}

#wpcf7-f2400-o1 input {
        background: rgba(0, 0, 0, 0.1);
    width: 100%;
    height: 48px;
    border: none;
    border-radius: 4px;
    display:block;
    font-family: 'Source Sans Pro', sans-serif;
    font-size:15px;
    color:#444;
    padding-left:20px;
    padding-right:20px;
    margin-bottom:20px;
}

#wpcf7-f2400-o1 input[type=submit] {
    cursor:pointer;
}

::-webkit-input-placeholder {
          color: #999;
}

:-moz-placeholder{
    color: #999;
}

::-moz-placeholder {
    color: #999;
}

:-ms-input-placeholder {
          color: #999;
}

#wpcf7-f2400-o1 input:focus, #wpcf7-f2400-o1 textarea:focus {
          background-color: rgba(0, 0, 0, 0.15);
}

#wpcf7-f2400-o1 .wpcf7-submit {
        margin:0 auto;
    background: #F95C18;
    padding: 10.5px 21px;
    border-radius: 4px;
    color: #fff;
        font-size:18px;
        transition:all 0.3s;
}
#wpcf7-f2400-o1 .wpcf7-submit:hover {
    background: #E34602;
 }

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

48 комментариев
  1. Все работает, все отлично.Но когда я вставляю header, то кнопка пропадает. Тема divi

    1. Неважно какая тема. Что значит «вставляю header»? Смотрите исходный код. Кнопка — это html и css. Она не может просто пропадать.

  2. У меня есть divi builder и там можно создавать свое меню,и когда я его создал,я вставил в страницу,и пропала кнопка обратной связи.

    1. Не знаю чем помочь. Это нужно смотреть, что к чему, и где допускаете ошибку.

      1. WordSmall, можете пожалуйста мне написать в телеграмм

  3. благодарю за полезную информацию.

    Вижу много уроков по WP. У меня есть сайт на нем — не могу решить проблему с поиском — что бы не устанавливал, ищет только среди blogposts. А основная информация — в pages...

    Даже плагин поиска, где явно указал, что искать нужно и там, и там — не помогает((

    1. По умолчание WP выдает в поиске страницы. Может у вас кастомные посты.

Оставить ответ

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