Как использовать WP Remote POST для отправки данных с формы в WordPress

Функция wp_remote_post – это мощный инструмент в WordPress для отправки HTTP POST запросов к внешним API или сервисам. Она часто применяется для интеграции с внешними системами, передачи данных с форм, отправки уведомлений и многого другого.

Что такое wp_remote_post и зачем она нужна

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

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

Основные параметры функции wp_remote_post

Основной синтаксис функции:

$response = wp_remote_post( $url, $args );

Где:

  • $url — адрес, куда отправляем запрос.
  • $args — массив аргументов, среди которых:
  • body — массив или строка с данными для отправки.
  • headers — массив заголовков HTTP.
  • timeout — время ожидания ответа.
  • cookies — массив куки.
  • sslverify — проверять ли SSL-сертификат.

Пример отправки простых данных формы:

$response = wp_remote_post('https://example.com/api', [
    'body' => [
        'name' => 'Ivan',
        'email' => 'ivan@example.com',
        'message' => 'Привет!'
    ],
    'timeout' => 15
]);

Обработка ответа и ошибок при использовании wp_remote_post

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

Пример обработки:

if ( is_wp_error($response) ) {
    $error_message = $response->get_error_message();
    echo "Ошибка запроса: $error_message";
} else {
    $status_code = wp_remote_retrieve_response_code($response);
    $body = wp_remote_retrieve_body($response);
    if ($status_code == 200) {
        echo "Успешно! Ответ сервера: " . esc_html($body);
    } else {
        echo "Ошибка сервера: статус $status_code";
    }
}

Такой подход помогает выявить проблемы с сетью, неверным URL, ошибками на сервере и корректно обработать результат.

Практический пример: отправка данных из формы WordPress с помощью wp_remote_post

Допустим, у вас есть кастомная форма на сайте, и нужно отправить её данные на внешний API. Пример обработчика в functions.php:

function wpupload_handle_form_submission() {
    if ( ! isset($_POST['wpupload_form_nonce']) || ! wp_verify_nonce($_POST['wpupload_form_nonce'], 'wpupload_form_action') ) {
        return; // Защита от CSRF
    }

    $name = sanitize_text_field($_POST['name'] ?? '');
    $email = sanitize_email($_POST['email'] ?? '');
    $message = sanitize_textarea_field($_POST['message'] ?? '');

    if ( empty($name) || empty($email) || empty($message) ) {
        wp_die('Пожалуйста, заполните все поля.');
    }

    $response = wp_remote_post('https://external-service.ru/api/contact', [
        'body' => compact('name', 'email', 'message'),
        'timeout' => 20,
        'headers' => [
            'Accept' => 'application/json',
        ],
    ]);

    if ( is_wp_error($response) ) {
        wp_die('Ошибка при отправке данных: ' . $response->get_error_message());
    }

    $code = wp_remote_retrieve_response_code($response);
    if ($code !== 200) {
        wp_die('Сервер вернул ошибку: ' . $code);
    }

    wp_redirect(home_url('/thank-you'));
    exit;
}
add_action('admin_post_nopriv_wpupload_form_submit', 'wpupload_handle_form_submission');
add_action('admin_post_wpupload_form_submit', 'wpupload_handle_form_submission');

HTML-форма для отправки:

<form action="<?php echo esc_url(admin_url('admin-post.php')); ?>" method="post">
  <input type="hidden" name="action" value="wpupload_form_submit">
  <?php wp_nonce_field('wpupload_form_action', 'wpupload_form_nonce'); ?>
  <label>Имя:<input type="text" name="name" required></label>
  <label>Email:<input type="email" name="email" required></label>
  <label>Сообщение:<textarea name="message" required></textarea></label>
  <button type="submit">Отправить</button>
</form>

Советы и лучшие практики при работе с wp_remote_post

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

2. Используйте таймауты. По умолчанию таймаут небольшой, но лучше явно задавать значение, чтобы не зависать на долгих запросах.

3. Защищайте передаваемые данные. Если отправляете конфиденциальную информацию, используйте HTTPS и проверяйте сертификаты (параметр sslverify).

4. Обрабатывайте ошибки на стороне клиента и сервера. Если запрос не удался, нужно корректно уведомить пользователя.

5. Используйте nonce и проверку прав. Для обработки форм с помощью admin_post лучше применять nonce для защиты от CSRF-атак.

Заключение: почему стоит использовать wp_remote_post в WordPress

Функция wp_remote_post — это встроенное, простое и мощное решение для отправки POST-запросов из WordPress. Она интегрирована с системой HTTP API WordPress, что обеспечивает совместимость, обработку ошибок и безопасность.

Используя её, вы можете реализовать интеграции с внешними сервисами, отправлять данные форм, отправлять уведомления и строить сложные сценарии взаимодействия с API, не прибегая к дополнительным библиотекам.

Если хотите углубиться в тему HTTP API WordPress, обратите внимание на официальную документацию: https://developer.wordpress.org/plugins/http-api/.

Также рекомендуем ознакомиться с плагином WPRemark для расширенного управления формами и интеграциями.

Как сохранить и загрузить медиафайлы WordPress
22.11.2025
Как делать автоматические резервные копии файлов в WordPress
31.01.2026
Как использовать WP-CLI для управления медиафайлами в WordPress
22.03.2026
Как автоматизировать удаление старых файлов в WordPress: практические решения для WPUpload
27.11.2025
Автоматическое удаление неиспользуемых вариантов товаров в WooCommerce
11.05.2026

wp upload - это директория в WP для загрузки файлов. Подробнее про загрузку файлов в админку можно почитать на этой странице.