MENU

allowed_http_request_hosts()

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 ではワイルドカード(*)が使えないため、すべてのホストを許可することは推奨されていません。特定のホストのみを許可するようにしてください。

allowed_http_request_hosts を設定しても wp_remote_get() が失敗するのはなぜですか?

ホストがリストに追加されているかを確認してください。また、SSL 証明書エラーやサーバーの wp-config.phpWP_HTTP_BLOCK_EXTERNAL の設定もチェックしてください。

wp_remote_get() でタイムアウトが発生した場合の対処法は?

timeout パラメータを設定することで解決できる場合があります。

$response = wp_remote_get('https://api.example.com/data', array('timeout' => 10));

まとめ

allowed_http_request_hosts は、WordPress で外部サイトへの HTTP リクエストを行う際に許可するホストを制御する重要なフィルターフックです。

wp_remote_get()wp_remote_post() との組み合わせで活用され、特定の API や外部サービスへのリクエストを許可するのに役立ちます。

よかったらシェアしてね!
  • URLをコピーしました!

コメント

コメントする

This site uses Akismet to reduce spam. Learn how your comment data is processed.

目次