Ответы пользователя по тегу AJAX
  • Почему после натяжки сайта на wp перестали работать все формы обратной связи?

    ya-vitaliy
    @ya-vitaliy
    Верстаю... + wordpress и пробую Laravel
    Работа с ajax в вп немного отличается.
    1. нужно url указать:
    url: '/wp-admin/admin-ajax.php',
    2. нужно указать action в data:
    data:{
        action: 'my_function',
        form_data: $("#form").serialize()
     }

    это названии функции которая будет обработчиком.
    3. В файле functions.php темы нужно зарегистрировать функцию обработчик (которую указали в js)
    add_action('wp_ajax_my_function', 'my_function');
    add_action('wp_ajax_nopriv_my_function', 'my_function');
    function my_function() {
    // здесь обработка данных отправка писем
    }

    К примеру, что-то похожее делал js выглядел так:
    function sendDataEmail(email, problem, id_game){
    
            $.ajax({
                type:'POST',
                url:'/wp-admin/admin-ajax.php',
                data: {
                    action: 'ajax_send_problem',
                    email: email,
                    problem: problem,
                    id_game: id_game
                },
                success: function (response) {
                    console.log(response);
                },
                error: function () {
                    alert('AJAX ERROR');
                }
            });
        }

    А php так:
    add_action('wp_ajax_send_problem', 'ajax_send_problem');
    add_action('wp_ajax_nopriv_ajax_send_problem', 'ajax_send_problem');
    function ajax_send_problem() {
    
        $result = null;
    
        if(isset($_POST['email']) and isset($_POST['problem']) and $_POST['id_game']){
    
            $email = trim(strip_tags($_POST['email']));
            $problem = trim(strip_tags($_POST['problem']));
            $id_game = trim(strip_tags($_POST['id_game']));
    
            $title_slot = get_the_title($id_game);
            $link_slot = get_the_permalink($id_game);
    
            /*------create email massage----*/
            $to = get_option('admin_email');
            $subject = "Problem game in slot: ".$title_slot;
    
            if($email){
                $email = 'name@emptymail.com';
            }
    
            $massage = "<p><b>Slot error:</b> $problem</p>";
            $massage .= "<p><b>Slot:</b> <a href='".$link_slot."'>$title_slot</a></p>";
            $massage .= "<p><b>Date:</b> ".date('d.m.Y')."</p>";
    
            $headers = "Content-Type: text/html; charset=utf-8; \n\r From: User SlotsSpot <".$email.">" . "\r\n";
    
            $result = wp_mail($to, $subject, $massage, $headers);
    
            if($result){
                echo 'send';
            }else{
                echo 'not send';
            }
            exit();
    
        }else{
            return $result =  'error';
        }
    }

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