Функция 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 и получать удаленные данные. Понимание её возможностей и параметров помогает в создании более гибких и функциональных решений.
