Как HTML-форма может вызвать функцию PHP?

Вопрос или проблема

Я новичок в мире WordPress/PHP. Я хочу, чтобы моя страница могла взаимодействовать с API, который я создаю сам. Для этого у меня есть форма на моей странице WordPress, использующая виджет HTML-кода, который выглядит так:

<html>
<body>
    <div>
        <form id="myform" action="submit_shortcode">
            <input type="text" id="input" placeholder="Input" required>
            <input type="submit" value="Ввод">
        </form>
    </div>
</body>
</html>

И я добавил этот код в functions.php текущей темы:

function get_shortcode($sc) {
    $response = wp_remote_get('http://localhost:9000/shortcode/'.$sc);

    if (is_array($response)) {
        $body = $response['body'];
        $data = json_decode($body);
        echo $data;
        if (! is_wp_error($data)) {
            echo "ошибка";
        }
    }

    return;
}

add_action('submit_shortcode', 'get_shortcode');

Но я не вижу, как интегрировать функцию с формой. Когда я отправляю свою форму, меня перекидывает на mypage/submit_shortcode. Как можно вызвать функцию get_shortcode при отправке формы?

PS: Этот “shortcode” не имеет ничего общего с виджетом Shortcode в Elementor

Похоже, вы хотите выполнить AJAX-запрос какого-то рода.

В вашем файле functions.php зарегистрируйте некоторый JavaScript для обработки формы.

wp_register_script( 'my-scripts', get_stylesheet_directory_uri() . '/[путь к вашим скриптам]/myscripts.js', array( 'jquery' ), '1.0', true );

Смотрите этот линк для справки.

Прямо под этим добавьте переменную JavaScript для вашего AJAX URL.

wp_localize_script( 'my-scripts', 'data', array( 'ajax_url' => admin_url( 'admin-ajax.php' ));

Справка по wp_localize_script и admin_url.

После регистрации скрипта добавьте его в очередь, чтобы он был загружен.

wp_enqueue_script( 'my-scripts' );

Под этим добавьте свой код для получения ответа от вашего API.

// ваша функция, подготовленная для AJAX
function get_api_response() {
    $response = wp_remote_get('http://localhost:9000/shortcode/'.$sc);

    if (is_array($response)) {
        $body = $response['body'];
        $data = json_decode($body);
        echo $data;
        if (! is_wp_error($data)) {
            echo "ошибка";
        }
    }

    wp_die(); // убедитесь, что вы это делаете
}
add_action( 'wp_ajax_get_api_response', 'get_api_response' );
add_action( 'wp_ajax_nopriv_get_api_response', 'get_api_response' );

Справка здесь.

И наконец, в вашем JavaScript-файле (myscripts.js в этом примере) обработайте отправку формы.

jQuery(document).ready(function($) {
    $('#myform').on('submit', function(e) {
        e.preventDefault(); // остановите отправку формы
        $.post(
            data['ajax_url'], // передается из wp_localize_script
            {
                'input' : $('#input').val()
            },
            function( response ) {
                // делайте что хотите здесь
                // ответ будет тем, что возвращает
                // функция get_api_response
            }
        );
    });
});

Если вы не хотите использовать AJAX, “shortcode”, который вы используете, нужно превратить в настоящий шорткод и использовать на странице, на которую вы размещаете свою форму. Информация об этом здесь.

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

Надеюсь, это поможет.

С наилучшими пожеланиями!

Если вам комфортно с JavaScript, один из способов подойти к тому, что, как я думаю, вы пытаетесь сделать, будет зарегистрировать JavaScript-версию вашей функции и просто вызвать ее из формы как атрибут onSubmit. Таким образом:

Введите имя:

и вы зарегистрировали myFunction либо в function.php, либо в плагине:

function load_my_script() {
    wp_enqueue_script( 'myFunction', get_template_directory_uri() . '/js/myFunction.js');
}
add_action( 'wp_enqueue_scripts', 'load_my_script' );

Ответ или решение

Как HTML-форма может вызвать функцию PHP в WordPress

Если вы новичок в мире WordPress и PHP, вы, вероятно, сталкиваетесь с задачей интеграции HTML-формы с функциями PHP, чтобы ваше приложение могло взаимодействовать с API. Приведем пошаговое руководство, как это сделать.

Шаг 1: Создание HTML-формы

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

<div>
    <form id="myform" action="submit_shortcode">
        <input type="text" id="input" placeholder="Input" required>
        <input type="submit" value="Enter">
    </form>
</div>

Шаг 2: Настройка обработчика формы на стороне PHP

Теперь, когда форма готова, следующим шагом будет обработка её данных на стороне сервера. Вместо того, чтобы перенаправлять пользователя на mypage/submit_shortcode, мы можем использовать AJAX для асинхронного взаимодействия. Это позволит избежать перезагрузки страницы.

2.1 Регистрация и локализация скрипта

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

function load_my_scripts() {
    wp_register_script('my-scripts', get_stylesheet_directory_uri() . '/path/to/your/scripts/myscripts.js', array('jquery'), '1.0', true);

    wp_localize_script('my-scripts', 'data', array('ajax_url' => admin_url('admin-ajax.php')));

    wp_enqueue_script('my-scripts');
}
add_action('wp_enqueue_scripts', 'load_my_scripts');

Этот код регистрирует ваш JavaScript-файл и локализует объект data, содержащий URL для AJAX-запросов.

2.2 Создание функции для обработки AJAX-запроса

Теперь необходимо создать функцию, которая будет обрабатывать ваши AJAX-запросы:

function get_api_response() {
    $sc = sanitize_text_field($_POST['input']); // Санитизация входного значения
    $response = wp_remote_get('http://localhost:9000/shortcode/' . esc_attr($sc));

    if (is_array($response) && !is_wp_error($response)) {
        $body = $response['body'];
        echo $body; // Возврат данных
    } else {
        echo "Ошибка запроса"; // Обработка ошибок
    }

    wp_die();
}

add_action('wp_ajax_get_api_response', 'get_api_response');
add_action('wp_ajax_nopriv_get_api_response', 'get_api_response');

Эта функция будет вызвана при отправке формы и обрабатывает данные, используя API. Не забудьте доработать обработку ошибок для улучшения надежности.

Шаг 3: Обработка события отправки формы с помощью JavaScript

Теперь время добавить код в вашем JavaScript файле (например, myscripts.js):

jQuery(document).ready(function($) {
    $('#myform').on('submit', function(e) {
        e.preventDefault(); // Установка предотвращения стандартного поведения формы

        $.post(data['ajax_url'], 
            {
                'input': $('#input').val() // Передача значения поля ввода
            }, 
            function(response) {
                // Здесь вы можете обрабатывать ответ
                console.log(response); // Печать ответа в консоль, измените по необходимости
            }
        );
    });
});

Этот код перехватывает событие отправки формы, останавливает его, и делает AJAX-запрос к серверу с данными, полученными от пользователя.

Заключение

Следуя приведенным выше шагам, вы сможете зарегистрировать HTML-форму и связать её с обработчиком PHP, использующим AJAX для более плавного взаимодействия пользователя с вашим API. Обратите внимание на важность санитаризации данных на стороне сервера для обеспечения безопасности вашего веб-приложения.

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

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

Капча загружается...