allowed_http_request_hosts
フィルターフックは、WordPress 内で外部サイトへの HTTP リクエストを行う際に許可するホストを指定するために使用されます。
デフォルトではセキュリティの観点から不明なホストへのリクエストを制限していますが、このフックを利用することで、特定のホストを許可リストに追加できます。
例えば、独自 API サーバーや特定の外部サービスへのリクエストを許可する際に役立ちます。
機能の説明
allowed_http_request_hosts
は、WordPress の wp_remote_get()
や wp_remote_post()
などの HTTP リクエスト処理で、指定したホストが許可されているかを制御するフィルターフックです。
主な用途
- 外部 API との通信を許可する
- WordPress のデフォルト制限を回避し、安全なホストのみを許可する
wp_remote_get()
やwp_remote_post()
のリクエストがブロックされる問題を解決する
シンプルなコード例
function allow_custom_host($hosts) {
$hosts[] = 'example.com'; // 許可するホストを追加
return $hosts;
}
add_filter('allowed_http_request_hosts', 'allow_custom_host');
$hosts[] = 'example.com';
:ホストリストにexample.com
を追加add_filter('allowed_http_request_hosts', 'allow_custom_host');
:フィルターを適用
このコードを追加すると、example.com
への HTTP リクエストが許可されます。
使い方の説明
複数のホストを許可する
複数のホストを許可したい場合は、配列に追加していきます。
function allow_multiple_hosts($hosts) {
$hosts[] = 'api.example.com';
$hosts[] = 'cdn.example.net';
return $hosts;
}
add_filter('allowed_http_request_hosts', 'allow_multiple_hosts');
追加されるホスト
api.example.com
cdn.example.net
ワイルドカードを使ったホストの許可
allowed_http_request_hosts
フィルターではワイルドカード(*
)は使用できません。そのため、サブドメインを個別に追加する必要があります。
一緒に使うことが多い関連タグ
wp_remote_get()
外部 API からデータを取得する。
$response = wp_remote_get('https://api.example.com/data');
if (!is_wp_error($response)) {
$body = wp_remote_retrieve_body($response);
echo $body;
}
wp_remote_get('https://api.example.com/data')
:指定した URL からデータを取得is_wp_error($response)
:リクエストエラーをチェックwp_remote_retrieve_body($response)
:レスポンスボディを取得
wp_remote_post()
データを送信する場合に使用。
$response = wp_remote_post('https://api.example.com/submit', array(
'body' => array('key' => 'value')
));
追加情報で取得したい場合
許可されているホストのリストを確認
現在の allowed_http_request_hosts
のリストを確認するには、以下のコードを functions.php
に追加し、管理画面で var_dump()
を確認します。
function debug_allowed_hosts() {
$hosts = apply_filters('allowed_http_request_hosts', array());
var_dump($hosts);
}
add_action('admin_init', 'debug_allowed_hosts');
想定されるトラブル
特定のホストへのリクエストがブロックされる
解決方法
allowed_http_request_hosts
フィルターを利用してホストを追加するwp_remote_get()
やwp_remote_post()
のエラーメッセージを確認するis_wp_error()
を使ってエラーの詳細を取得する
$response = wp_remote_get('https://blocked.example.com');
if (is_wp_error($response)) {
echo 'エラー: ' . $response->get_error_message();
}
Q&A
まとめ
allowed_http_request_hosts
は、WordPress で外部サイトへの HTTP リクエストを行う際に許可するホストを制御する重要なフィルターフックです。
wp_remote_get()
や wp_remote_post()
との組み合わせで活用され、特定の API や外部サービスへのリクエストを許可するのに役立ちます。
コメント