Функция 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 для расширенного управления формами и интеграциями.