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ă separatwp_remote_retrieve_response_code(). - Apeluri HTTP la fiecare afișare de pagină: încetinesc site-ul. Păstrează rezultatul într-un transient.
'sslverify' => falselă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.
Întrebări & Exemple de Cod:
wp_remote_getAi o nelămurire despre utilizarea comenzii
wp_remote_getsau 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.