今回は、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を使っておくのが無難ですね。