Folosirea wp_remote_get în loc de file_get_contents
Am rulat tema mea prin plugin-ul Theme Checker și pare să fie nemulțumit de utilizarea file_get_contents
pentru a prelua un URL JSON. Am găsit postări care spun că ar trebui să folosesc wp_remote_get
. În prezent, decodez URL-ul în felul următor:
$url = 'url' . $var;
$json = file_get_contents($url,0,null,null);
$output = json_decode($json,true);
Mesajul pe care îl primesc de la Theme Checker este:
WARNING: file_get_contents a fost găsit în file.php posibile operațiuni cu fișiere.
Îmi arată acest avertisment doar pentru că există o funcție pe care aș putea să o folosesc din WordPress sau există și alte motive? De asemenea, cum aș putea folosi wp_remote_get
. Am încercat câteva variante, în principal înlocuind file_get_contents cu wp_remote_get
fără succes. Nu pare să decodeze URL-ul deloc.

Dacă trebuie să trimiți un răspuns JSON, există un set de funcții pentru asta. În cazul în care ai nevoie de acest lucru pentru un callback AJAX:
wp_remote_retrieve_response_message()
wp_remote_retrieve_response_code()
wp_send_json_success()
wp_send_json_error()
wp_send_json()
În final, ar arăta cam așa:
$request = wp_remote_get( 'http://example.com' );
$response = wp_remote_retrieve_body( $request );
if (
'OK' !== wp_remote_retrieve_response_message( $response )
OR 200 !== wp_remote_retrieve_response_code( $response )
)
wp_send_json_error( $response );
wp_send_json_success( $response );
Ambele funcții wp_send_json_success/_error()
sunt wrapper-e pentru wp_send_json()
, care include wp_die()
la final. Deci nu mai este nevoie de altceva.
Ține minte că 99% dintre API-urile externe trimit 200/OK
chiar și în caz de erori. Va trebui totuși să inspectezi manual rezultatul și să verifici erorile.

Folosește wp_remote_get() în conjuncție cu wp_remote_retrieve_body()
Exemplu
<?php
$request = wp_remote_get('http://example.com');
$response = wp_remote_retrieve_body( $request );
echo $response;
?>
Verifică documentația pentru argumentele posibile

Bună, mulțumesc, se pare că pot afișa întregul conținut, dar când încerc să obțin doar anumite valori din fișierul json, de exemplu $response['companyname'], primesc doar '{'

Dacă corpul unui document este și el un fișier json, atunci folosește json_encode()

Puteți folosi wp_remote_get()
în următorul mod:
$url = 'url' . $var;
$request = wp_remote_get($url);
// Obține corpul răspunsului
$response = wp_remote_retrieve_body( $request );
// Decodifică json-ul
$output = json_decode( $response );
$output
conține acum ceea ce doriți și puteți continua să faceți ceea ce aveți nevoie.
Există și o serie de tutoriale despre wp_remote_get()
. Parcurgeți-le, vă vor fi cu siguranță de folos.
Link -- Tutorial
Sper că vă este de ajutor.
