WordPressでfile_get_contentsが動かない時の対処法(wp_remote_getの使い方)

今回は、WordPressでfile_get_contentsが動かない時の対処法について書いていきます。

外部サイトのJSONファイルを読み込みたい時、今回紹介する方法を試してみて下さい。

file_get_contentsが動かない理由

レンタルサーバーの設定によっては、PHPでfile_get_contentsが動かない場合があります。

php.iniでallow_url_fopen = Offと設定されていると、file_get_contentsがエラーになり動作しません。

対処法① allow_url_fopen = On に修正する

サーバーでphp.iniファイルを修正できる場合、以下ようにコードを修正しましょう。

php.ini

;allow_url_fopen = Off
allow_url_fopen = On

;はコメントアウトで、その下に行を追加します。

追加ではなく、OffをOnに書き換える方法でも大丈夫です。

対処法② wp_remote_getを使う

php.iniを修正するのが面倒な場合やサーバーの設定が変更できない場合は、こちらの方法を使いましょう。

テーマを配布したり、クライアントに納品する場合もそうです。

取得先のJSON

{ "status": "true" }

このJSONデータをfunctions.phpで取得するには、

functions.php

/**
 * 外部サイトのJSONを取得する
 */
$url = 'https://sample.com/api/?param=hoge';
$response = wp_remote_get( $url );
$json = $response["body"];
$json = json_decode( $json, true );

echo $json["status"]; // "true"

この方法で取得できます。

また、

$response['response']['code']

これでステータスコードが取得できるので、条件分岐させることも可能です。

functions.php

/**
 * 外部サイトのJSONを取得する
 */
$url = 'https://sample.com/api/?param=hoge';
$response = wp_remote_get( $url );
$json = $response["body"];
$json = json_decode( $json, true );
if( $response['response']['code'] === 200 ) {
  echo $json["status"]; // "true"
}

file_get_contentsは使わずに、wp_remote_getを使っておくのが無難ですね。