wp_remote_get în WordPress

Face cereri HTTP din PHP prin HTTP API-ul WordPress și întoarce un tablou cu răspunsul sau un obiect WP_Error.

Sintaxă
wp_remote_get( string $url, array $args = array() ): array|WP_Error
wp_remote_post( string $url, array $args = array() ): array|WP_Error
wp_remote_retrieve_body( array|WP_Error $response ): string
is_wp_error( mixed $thing ): bool

Ce face wp_remote_get

wp_remote_get() și wp_remote_post() (ambele din WordPress 2.7.0) trimit cereri HTTP către alte servere fără să scrii cod cURL. Răspunsul este un tablou cu cheile headers, body, response (cu code și message), cookies, filename și http_response. Dacă cererea nu reușește deloc (server inaccesibil, timeout), primești un obiect WP_Error.

Nu citi direct cheile tabloului: folosește funcțiile ajutătoare. wp_remote_retrieve_body() întoarce corpul răspunsului (șir gol pentru WP_Error), iar wp_remote_retrieve_response_code() întoarce codul HTTP. is_wp_error() (din WordPress 2.1.0) verifică dacă o valoare este WP_Error; mesajul îl afli cu $eroare->get_error_message().

Opțiunile cererii se dau în $args (lista completă e la WP_Http::request()). Timeout-ul implicit este de 5 secunde. Dacă adresa vine de la utilizator, documentația recomandă wp_safe_remote_get() (din 3.6.0), care respinge adresele nesigure.

Parametri

Parametru Descriere
$url Adresa cererii.
timeout Cheie în $args: câte secunde se așteaptă răspunsul. Implicit 5.
headers Cheie în $args: tablou cu antete, de exemplu 'Content-Type' => 'application/json'.
body Cheie în $args: corpul cererii (șir sau tablou de câmpuri), folosit la POST.
method Cheie în $args: metoda HTTP. Implicit 'GET' (la wp_remote_post() este 'POST').
sslverify Cheie în $args: verifică certificatul HTTPS. Implicit true; nu îl dezactiva în producție.
redirection Cheie în $args: câte redirecționări se urmează. Implicit 5.

Ce returnează

Un tablou cu răspunsul (headers, body, response, cookies, filename, http_response) sau un obiect WP_Error la eșec. wp_remote_retrieve_body() întoarce un șir, iar is_wp_error() întoarce true sau false.

Exemple

Exemplul 1: Citirea vremii din Cluj dintr-un API JSON

Verificăm întâi eroarea de rețea, apoi codul HTTP, și abia după aceea decodăm corpul.

<?php
function dex_vremea_cluj() {
    $raspuns = wp_remote_get( 'https://api.exemplu.ro/vreme?oras=cluj', array(
        'timeout' => 10,
    ) );

    if ( is_wp_error( $raspuns ) ) {
        return '<p>Vremea nu este disponibilă acum.</p>';
    }
    if ( 200 !== wp_remote_retrieve_response_code( $raspuns ) ) {
        return '<p>Serviciul meteo a răspuns cu o eroare.</p>';
    }

    $date = json_decode( wp_remote_retrieve_body( $raspuns ), true );
    return '<p>Cluj: ' . esc_html( $date['temperatura'] ) . ' °C</p>';
}
echo dex_vremea_cluj();

Ce afișează pagina

<p>Cluj: 14 °C</p>

Exemplul 2: Trimiterea unei comenzi prin POST cu JSON

wp_remote_post() cu antet Content-Type și corp JSON; rezultatul îl scriem în debug.log cu error_log().

<?php
$comanda = array(
    'id'     => 1024,
    'client' => 'Ana Popescu',
    'total'  => 87.50,
);

$raspuns = wp_remote_post( 'https://facturi.exemplu.ro/api/comenzi', array(
    'headers' => array( 'Content-Type' => 'application/json' ),
    'body'    => wp_json_encode( $comanda ),
    'timeout' => 15,
) );

if ( is_wp_error( $raspuns ) ) {
    error_log( 'dex: eroare la trimitere: ' . $raspuns->get_error_message() );
} else {
    error_log( 'dex: comanda 1024 trimisă, cod ' . wp_remote_retrieve_response_code( $raspuns ) );
}

Rezultat

[25-Oct-2026 09:14:02 UTC] dex: comanda 1024 trimisă, cod 201

Exemplul 3: Ce se scrie în log când serverul nu răspunde

Același cod, când serverul nu răspunde în 15 secunde: is_wp_error() e true, iar get_error_message() conține mesajul cURL.

<?php
if ( is_wp_error( $raspuns ) ) {
    error_log( 'dex: eroare la trimitere: ' . $raspuns->get_error_message() );
}

Rezultat

[25-Oct-2026 09:20:41 UTC] dex: eroare la trimitere: cURL error 28: Operation timed out after 15001 milliseconds with 0 bytes received

Greșeli frecvente

  • Să folosești rezultatul fără is_wp_error(): la o eroare de rețea, $raspuns['body'] dă eroare, pentru că ai un obiect, nu un tablou.
  • Să crezi că un cod 404 sau 500 produce WP_Error: nu, cererea a reușit tehnic. Verifică separat wp_remote_retrieve_response_code().
  • Apeluri HTTP la fiecare afișare de pagină: încetinesc site-ul. Păstrează rezultatul într-un transient.
  • 'sslverify' => false lăsat în producție: dezactivează verificarea certificatului.

Comenzi înrudite

  • set_transient / get_transient: Transients API păstrează temporar un rezultat costisitor (un apel HTTP, o interogare), cu durată de expirare în secunde.
  • register_rest_route: Înregistrează un endpoint propriu în REST API-ul WordPress, accesibil la o adresă de forma /wp-json/dex/v1/meniu.
  • WP_DEBUG și debug.log: Constantele din wp-config.php care pornesc modul de depanare și scriu erorile PHP în wp-content/debug.log în loc să le afișeze.
Comunitate & Schimb de cunoștințe

Întrebări & Exemple de Cod: wp_remote_get

Ai o nelămurire despre utilizarea comenzii wp_remote_get sau ai descoperit un truc / fragment de cod util? Distribuie-l cu ceilalți programatori!

💬

Fii primul care pune o întrebare sau distribuie un fragment de cod / prompt!

Nu au fost adăugate încă întrebări sau exemple de cod pentru această pagină. Dacă ai întâlnit o problemă sau ai un snippet util, adaugă-l mai jos pentru a-i ajuta pe ceilalți.

Comunitate Adaugă o întrebare sau distribuie un cod

Moderare & Siguranță:

Pentru a menține calitatea și securitatea informațiilor, fiecare întrebare sau fragment de cod/prompt este analizat (manual sau prin moderare asistată de AI) înainte de publicare.