Функция wp_remote_get()
в WordPress используется для выполнения HTTP-запросов GET. Она позволяет извлекать данные с удаленного сервера, что полезно для интеграции с внешними API или для получения информации с других сайтов.
wp_remote_get( string $url, array $args = array() )
$url
(string) (обязательный) — URL, к которому нужно выполнить запрос.$args
(array) (опциональный) — Массив аргументов для настройки запроса.
Аргументы
$args
может включать следующие параметры:
method
(string) — Метод HTTP (по умолчаниюGET
).timeout
(int) — Время ожидания ответа (по умолчанию 5 секунд).redirection
(int) — Количество перенаправлений (по умолчанию 5).httpversion
(string) — Версия HTTP (по умолчанию1.0
).blocking
(bool) — Определяет, будет ли запрос блокирующим или неблокирующим (по умолчаниюtrue
).headers
(array) — Ассоциативный массив заголовков запроса.cookies
(array) — Список cookie для отправки с запросом.body
(string|array) — Тело запроса.compress
(bool) — Использовать сжатие (по умолчаниюfalse
).decompress
(bool) — Декомпрессировать ответ (по умолчаниюtrue
).sslverify
(bool) — Проверять SSL сертификат (по умолчаниюtrue
).stream
(bool) — Потоковый вывод в файл (по умолчаниюfalse
).filename
(string) — Имя файла для потокового вывода.
Возвращаемое значение
Возвращает массив на успехе или WP_Error
на ошибке. Структура массива:
headers
(array) — Заголовки ответа.body
(string) — Тело ответа.response
(array) — Код и сообщение ответа.cookies
(array) — Список cookie.filename
(string) — Имя файла (если используется потоковый вывод).
Пример 1: Получение данных с удаленного API
Допустим, мы хотим получить данные с публичного API для отображения последних постов с сайта JSONPlaceholder.
function genius_fetch_latest_posts() {
$url = 'https://jsonplaceholder.typicode.com/posts';
// Выполнение GET запроса
$response = wp_remote_get( $url );
// Проверка на ошибки
if ( is_wp_error( $response ) ) {
return 'Ошибка: ' . $response->get_error_message();
}
// Получение тела ответа
$body = wp_remote_retrieve_body( $response );
// Преобразование JSON в массив
$posts = json_decode( $body, true );
// Проверка наличия данных
if ( empty( $posts ) ) {
return 'Нет данных';
}
// Формирование HTML вывода
$output = '<ul>';
foreach ( $posts as $post ) {
$output .= '<li>' . esc_html( $post['title'] ) . '</li>';
}
$output .= '</ul>';
return $output;
}
// Короткий код для вывода последних постов
add_shortcode( 'latest_posts', 'genius_fetch_latest_posts' );
Объяснение примера
- URL: Устанавливаем URL для выполнения запроса.
- Запрос: Выполняем HTTP GET запрос с помощью
wp_remote_get()
. - Проверка ошибок: Проверяем, вернул ли запрос ошибку. Если да, возвращаем сообщение об ошибке.
- Получение тела ответа: Извлекаем тело ответа с помощью
wp_remote_retrieve_body()
. - Преобразование JSON: Преобразуем JSON строку в PHP массив.
- Проверка данных: Проверяем, содержит ли массив данные.
- Формирование HTML: Формируем HTML вывод для списка постов.
- Короткий код: Создаем короткий код
[latest_posts]
для вставки списка постов на страницу или в пост.
Пример 2: Установка параметров при получении удаленной страницы
Этот пример показывает, как настроить параметры запроса для получения данных с удаленного сервера.
$response = wp_remote_get(
'http://www.example.com/index.php?action=foo',
[
'timeout' => 120,
'httpversion' => '1.1'
]
);
// Проверка правильного ответа
if ( is_wp_error( $response ) ) {
echo 'Ошибка: ' . $response->get_error_message();
} elseif ( wp_remote_retrieve_response_code( $response ) === 200 ) {
// Все ок, обработка данных
$body = wp_remote_retrieve_body( $response );
echo $body;
} else {
echo 'Непредвиденная ошибка';
}
Пример 3: Отправка неблокирующего запроса
Этот пример показывает, как отправить неблокирующий запрос, который не блокирует выполнение текущего кода.
$remote_url = 'https://site.com/wp-cron.php';
$args = [
'timeout' => 0.01,
'blocking' => false,
'sslverify' => false,
];
$result = wp_remote_post( $remote_url, $args );
// Продолжаем выполнение кода
echo 'Запрос отправлен, продолжаем выполнение...';
Пример 4: Запрос к аутентифицированному API
Этот пример показывает, как использовать wp_remote_get()
для получения данных с API, требующего аутентификации.
// Если API использует Bearer Token
$auth_scheme = 'Bearer';
$api_key = 'token';
// Если API использует Basic Auth
$auth_scheme = 'Basic';
$api_key = base64_encode( 'username' . ':' . 'password' );
// Установка URL API и выполнение запроса
$api_url = 'https://...';
$response = wp_remote_get( $api_url, array(
'headers' => array(
'Accepts' => 'application/json',
'Authorization' => $auth_scheme . ' ' . $api_key
),
) );
if ( is_wp_error( $response ) ) {
// Обработка ошибки
echo 'Ошибка: ' . $response->get_error_message();
} else {
// Получение тела ответа и преобразование в массив
$body = wp_remote_retrieve_body( $response );
$data = json_decode( $body, true );
// Обработка полученных данных
if ( !empty( $data ) ) {
echo '<pre>';
print_r( $data );
echo '</pre>';
} else {
echo 'Данные не получены';
}
}
Заключение
Функция wp_remote_get()
предоставляет мощный инструмент для выполнения HTTP GET запросов в WordPress, что позволяет интегрироваться с внешними API и получать удаленные данные. Понимание её возможностей и параметров помогает в создании более гибких и функциональных решений.