wp_remote_get() の使い方|説明・引数・注意点

説明

wp_remote_get() は、外部のURLにGETリクエストを送る関数です。外部APIからデータを取得するときに使います。

基本構文

wp_remote_get( string $url, array $args = array() ): array|WP_Error

引数

  • $url:リクエスト先URL
  • $args:timeout、headers、sslverify など

戻り値

レスポンスの配列。失敗時は WP_Error。

使い方(サンプル)

$res = wp_remote_get( 'https://api.example.com/items', array( 'timeout' => 10 ) );
if ( is_wp_error( $res ) ) {
	return;
}
$body = wp_remote_retrieve_body( $res );

注意点

  • is_wp_error() で失敗を必ず確認します。
  • タイムアウトを設定しないと、相手が遅いときにページ全体が遅くなります。結果は set_transient() でキャッシュするのが定番です。
  • HTTPステータスは wp_remote_retrieve_response_code() で確認します。

実務での使いどころ

  • 外部のAPI(天気、為替、他サイトのJSONなど)から、データを取得するとき。
  • 取得した結果を set_transient() で保存し、一定時間キャッシュするとき。
  • 外部サービスの稼働確認など、HTTPのステータスコードを確認するとき。

よくあるミスと対処

  • 戻り値が WP_Error の場合を考えていない。通信に失敗すると、配列ではなくエラーオブジェクトが返ります(判定には is_wp_error() を使います)。
  • ステータスコードを確認していない。404や500のときも、レスポンスの配列が返ります(取得には wp_remote_retrieve_response_code() を使います)。
  • レスポンスの本文を、配列から直接取り出している。wp_remote_retrieve_body() を使います。
  • ページを表示するたびに外部へリクエストしている。外部の応答が遅いと、サイト全体の表示が遅くなります(タイムアウトの既定は5秒です)。結果はキャッシュします。
  • ユーザー入力のURLに使っている。宛先を検証する wp_safe_remote_get() を使います。

NG例

$response = wp_remote_get( $url );
$data = json_decode( $response['body'], true ); // 通信に失敗したときに、エラーになる

OK例

$response = wp_remote_get( $url );
if ( is_wp_error( $response ) || 200 !== wp_remote_retrieve_response_code( $response ) ) {
	return;
}
$data = json_decode( wp_remote_retrieve_body( $response ), true );

使い分け早見表

関数 使う場面
wp_remote_get() GETで取得する(宛先が固定のURL)
wp_remote_post() POSTで送信する
wp_remote_request() GET・POST以外のメソッドも指定して送る
wp_safe_remote_get() 宛先が、ユーザー入力や設定値で変わるGET

関連項目

wp_remote_post()、wp_remote_retrieve_body()、set_transient()、wp_safe_remote_get()、wp_remote_retrieve_response_code()、wp_remote_request()、is_wp_error()

公式リファレンス:wp_remote_get() | Function | WordPress Developer Resources

コメント

タイトルとURLをコピーしました