• Знать бы — я ошибаюсь в коде или очередная опечатка. Оно переходит при клике на site-name.com/wp-admin/admin-ajax.php?action=send_mail, но белый экран. В консоли Unchecked runtime.lastError: The message port closed before a response was received. site-name.com/wp-admin/admin-ajax.php?action=send_mail
    HTML формы:

    <form id="pp_booking_form" method="post" action="<?php echo admin_url('admin-ajax.php?action=send_mail') ?>" >
                              <input type="hidden" id="action" name="action" value="pp_booking_mailer">
                                <input type="hidden" id="tour_title" name="tour_title" value="East Europe">
                                <input type="hidden" id="tour_url" name="tour_url" value="index.php">
    
                                <div class="one_half">
                                    <label for="first_name">First Name</label>
                                    <input id="first_name" name="first_name" type="text" class="required_field" required>
                                </div>
    
                                <div class="one_half last">
                                    <label for="last_name">Last Name</label>
                                    <input id="last_name" name="last_name" type="text" class="required_field" required>
                                </div>
    
                                <br class="clear">
                                <br>
    
                                <div class="one_half">
                                    <label for="email">Email</label>
                                    <input id="email" name="email" type="text" class="required_field" required>
                                </div>
    
                                <div class="one_half last">
                                    <label for="phone">Phone</label>
                                    <input id="phone" name="phone" type="text">
                                </div>
    
                                <br class="clear">
                                <br>
    
                                <div class="one">
                                    <label for="message">Additional Message</label>
                                    <textarea id="message" name="message" rows="7" cols="10" required></textarea>
                                </div>
    
                                <br class="clear">
    
                                <div class="one">
                                    <p>
                                        <input id="booking_submit_btn" type="submit" value="Book By Email">
                                    </p>
                                </div>
                            </form>
    
    JQuery
    
    jQuery(document).ready(function($) {
     var form = $('#pp_booking_form');
     var action = form.attr('action');
    
     form.on('submit', function(event) {
    var formData = {
      first_name: $('#first_name').val(),
      last_name: $('#last_name').val(),
      email: $('#email').val(),
      phone: $('#phone').val(),
      message: $('#message').val()
    };
    
    $.ajax({
      url: action,
      type: 'POST',	
      data: formData,
      error: function() {
         form.html("Ваш тур не забронирован");
      };
    
      sussess: function() {
        form.html("Ваш тур забронирован");
      }
    });
    
    event.preventDefault();
    
     });
    });
    
    В functions.php подключается так
    
    wp_enqueue_script( 'form_js', get_template_directory_uri() . '/assets/js/form.js', null, ['jquery'], true);
    
    Ниже в том же файле функций это:
    
    add_action( 'wp_ajax_send_mail', 'send_mail' );
    add_action( 'wp_ajax_nopriv_send_mail', 'send_mail' );
    
    function send_mail() {
      $first_name = $_POST['first_name'];
        $last_name = $_POST['last_name'];
      $email = $_POST['email'];
      $phone = $_POST['phone'];
      $message = $_POST['message'];
    
      $to = get_option( 'admin_email');
      $subject = 'Письмо без темы';
    
      remove_all_filters( 'wp_mail_from');
      remove_all_filters( 'wp_mail_from_name' );
    
    $headers = array(
      'From: Me Myself <me@example.net>',
      'content-type: text/html',
      'Cc: John Q Codex <jqc@wordpress.org>',
      'Cc: iluvwp@wordpress.org', // тут можно использовать только простой email адрес
    );
    
    wp_mail( $to, $subject, $message, $headers );
    wp_die();
    };
    
    Верстал не я, и на самом деле я не знаю что значат эти поля
    
    <input type="hidden" id="action" name="action" value="pp_booking_mailer">
                                <input type="hidden" id="tour_title" name="tour_title" value="East Europe">
                                <input type="hidden" id="tour_url" name="tour_url" value="index.php">
    
    Но даже если их закомментировать, то белый экран.
    Помогите разобраться пожалуйста! 
Просмотр 8 ответов — с 1 по 8 (всего 8)
  • А что Вы хотите сделать? Какая главная задача?

    Автор dartleft4protocreed

    (@dartleft4protocreed)

    Учусь переносить верстку на вордпресс, хочу научиться, чтоб форма работала без плагинов. Если все правильно — чтоб вывелось «Ваш тур забронирован».

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

    Модератор Yui

    (@fierevere)

    永子

    ^^ я бы к вышенаписанному еще добавила, не стоит заново изобретать и изготавливать из подручных материалов колесо, не говоря уже о велосипеде.

    Автор dartleft4protocreed

    (@dartleft4protocreed)

    Люди же пишут свои обработчики для форм, особенно если она всего одна, и не слетают же.

    Модератор Юрій

    (@yube)

    Белый экран — признак 500-й ошибки.

    Люди и движки свои пишут.

    Учусь переносить верстку на вордпресс

    Люди же пишут свои обработчики для форм

    Люди вообще часто делают много странных вещей.
    Например игнорируют основы и суть самого ВП.
    Напомню: тема — отвечает за внешний вид, верстку; плагины — отвечают за функционал.
    У таких мего разработчиков рождаются монстры типа «своятемабесплагинов».
    И ладно бы эти монстры просто глючили и тормозили (как им и положено), они же еще и сайты обрушивают при любом обновлении движка……

    Пару полеезных доков

    Home


    https://codex.wordpress.org/AJAX_in_Plugins
    и вот еще:
    https://misha.blog/wordpress/ajax.html
    https://wp-kama.ru/id_2018/ajax-v-wordpress.html
    https://habr.com/ru/company/dataart/blog/271189/

    удобней работать с ajax в вордпресс согласно кодекса

Просмотр 8 ответов — с 1 по 8 (всего 8)
  • Тема «Ajax-форма, белый экран, в чем ошибка?» закрыта для новых ответов.