web-dev-qa-db-fra.com

utiliser wp_remote_get au lieu de file_get_contents

j'ai passé mon thème à travers le plugin de vérificateur de thème et il semble contrarié par l'utilisation de 'file_get_contents' pour obtenir une URL json. J'ai trouvé des messages disant que je devrais utiliser wp_remote_get. Je décode actuellement l'URL avec les éléments suivants:

$url = 'url' . $var;
$json =   file_get_contents($url,0,null,null);
$output = json_decode($json,true); 

Le message que je reçois du contrôleur de thème est le suivant:

'AVERTISSEMENT: file_get_contents a été trouvé dans les opérations sur les fichiers file.php.'

Est-ce simplement dire cela parce qu'il y a une fonction que je pourrais éventuellement utiliser par wordpress ou pour toute autre raison? Aussi, comment pourrais-je utiliser 'wp_remote_get'. J'ai essayé quelques variantes, remplaçant principalement file_get_contents par wp_remote_get sans succès. Ne semble pas décoder l'URL du tout.

7
David

Si vous devez envoyer une réponse JSON, il existe un ensemble de fonctions pour cela. Si vous en avez besoin pour un rappel AJAX:

Serait finalement quelque chose comme ç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 );

Les deux fonctions wp_send_json_success/_error() sont des wrappers pour wp_send_json(), qui inclut wp_die() à la fin. Donc, il n'y a rien d'autre à faire.

Gardez à l'esprit que 99% de toutes les API distantes envoient 200/OK en cas d'erreur. Vous devrez toujours inspecter manuellement le résultat et rechercher les erreurs.

7
kaiser

Utilisez wp_remote_get () conjointement avec wp_remote_retrieve_body ()

Exemple

<?php
$request = wp_remote_get('http://example.com');
$response = wp_remote_retrieve_body( $request );
echo $response;
?>

Vérifiez la documentation pour des arguments possibles

5
Horttcore

Vous pouvez utiliser wp_remote_get() de la manière suivante.

$url = 'url' . $var;
$request =   wp_remote_get($url);
// Get the body of the response
$response = wp_remote_retrieve_body( $request );
// Decode the json
$output = json_decode( $response ); 

$output a maintenant ce que vous voulez et vous pouvez maintenant faire votre travail

Il existe également une série de didacticiels sur wp_remote_get (). Passez au travers, cela aiderait certainement. Lien - Tutoriel

J'espère que ça aide.

1
Maruti Mohanty