web-dev-qa-db-ja.com

file_get_contentsの代わりにwp_remote_getを使用する

テーマチェッカープラグインを介して私のテーマを実行しているし、それはJSONのURLを取得するために 'file_get_contents'の使用に腹を立てているようです。私はwp_remote_getを使うべきだという投稿を見つけました。私は現在、以下のURLをデコードしています。

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

テーマチェッカーから得たメッセージは次のとおりです。

'警告:file_get_contentsがfile.phpのファイル操作で見つかりました。'

私がおそらくワードプレスまたは他の何らかの理由で使用することができる機能があるのでそれはこれを言っているだけですか?また、どのように私は 'wp_remote_get'を使用するでしょう。私はいくつかのバリエーションを試しましたが、ほとんどの場合、file_get_contentsをwp_remote_getに置き換えました。 URLをまったくデコードしていないようです。

7
David

JSONレスポンスを送信する必要がある場合は、そのための一連の関数があります。あなたがAJAXコールバックのためにそれを必要とするならば:

ついにそのようなものになるでしょう:

$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 );

両方のwp_send_json_success/_error()関数は、最後にwp_send_json()を含むwp_die()のラッパーです。他にやることは何もありません。

すべてのリモートAPIの99%がエラーの場合に200/OKを送信していることに注意してください。結果を手動で調べてエラーをチェックする必要があります。

7
kaiser

wp_remote_get()wp_remote_retrieve_body() と組み合わせて使用​​する

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

可能な引数についてはドキュメントを確認してください

5
Horttcore

次のようにしてwp_remote_get()を使うことができます。

$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は今あなたが望むものを持っています、そして今あなたは先に行き、あなたのものをすることができます

Wp_remote_get()に関する一連のチュートリアルもあります。それを通過する、それは間違いなく助けになるでしょう。リンク - チュートリアル

それが役に立てば幸い。

1
Maruti Mohanty