campusboy87
12/1/2017 - 7:18 PM

Форма обратной связи. Пример на основе использования плагина AJAX Simply

Форма обратной связи. Пример на основе использования плагина AJAX Simply

<?php
/*
Plugin Name: Simple Ajax Form
Plugin URI: http://URI_Of_Page_Describing_Plugin_and_Updates
Description: A brief description of the Plugin.
Version: 1.0
Author: campusboy
Author https://wp-plus.ru
License: MIT
*/

add_shortcode( 'sif-form', 'sif_callback' );

function sif_callback() {
	?>

    <form class="my_form">
        <input type="text" name="user-name" placeholder="Введите имя">
        <input type="email" name="user-email" placeholder="Введите почту">
        <input type="submit">
        <div class="responce"></div>
    </form>
	
	<?php
	add_action( 'wp_footer', 'sif_style' );
	add_action( 'wp_footer', 'sif_script', PHP_INT_MAX );
}

function sif_script() {
	?>
    <script>
        jQuery('.my_form').submit(function (event) {
            event.preventDefault();

            var $form = jQuery(this);
            var $respBox = $form.find('.responce');

            $respBox.hide(300).attr('css', '');

            var result = ajaxs('sif_callback', $form);

            result.done(function (r) {
                if (r.success) {
                    $respBox.css('color', 'green').text('Сообщение успешно отправленно!');
                } else {
                    $respBox.css('color', 'red').text('Заполните все поля, пожалуйста.');
                }
            });

            result.always(function () {
                $respBox.show(300);
            });

        });
    </script>
	<?php
}

function sif_style() {
	?>
    <style>
        .my_form input {
            margin-bottom: 10px;
        }
    </style>
	<?php
}

/**
 * @param \AJAX_Simply_Core $jx
 */
function ajaxs_sif_callback( $jx ) {
	if ( $jx->{'user-name'} && $jx->{'user-email'} ) {
		$to      = get_bloginfo( 'admin_email' );
		$subject = 'Обратная связь';
		$message = 'Клиент: ' . $jx->{'user-name'} . 'Почта: ' . $jx->{'user-email'};
		
		$status = wp_mail( $to, $subject, $message );
		
		$jx->success( $status );
	}
	
	$jx->error( [
		'name'  => $jx->{'user-name'} ? true : false,
		'email' => $jx->{'user-email'} ? true : false,
	] );
}