ワードプレスのesc_url関数の使用方法・解説

概要

esc_url 関数は、URL文字列をクリーニングするために使用されるWordPressの関数です。この関数を利用することで、不正なURLやセキュリティ上のリスクを軽減し、安心してURLを出力することが可能になります。esc_url は主に以下のような機能を実装する際によく使われます。

  1. リンク生成時のURL検証
  2. フォーム送信時のURLのサニタイズ
  3. データベースに保存する前のURLのクリーニング
  4. テーマやプラグインでのリダイレクトURLの生成
  5. カスタムフィールドで保存されているURLの処理
  6. メディアアップロード時の自動URLクリーニング
  7. ウィジェットでのURL表示
  8. REST APIでのURLパラメータのサニタイズ

構文

esc_url( string $url, array $protocols = null )

パラメータ

  • $url (string) : クリーニング対象のURL。
  • $protocols (array, optional) : 許可するプロトコルのリスト。デフォルトは ‘http’ および ‘https’。

戻り値

  • (string) : クリーニングされたURLまたは空文字列。

関連する関数

使用可能なバージョン

  • WordPress 1.5.0以降

コアファイルのパス

  • wp-includes/formatting.php

サンプルコード

サンプルコード 1

$url = 'http://example.com/page?param=<script>alert(1)</script>';
$sanitized_url = esc_url($url);
echo $sanitized_url;

このサンプルコードは、悪意のあるスクリプトを含むURLを esc_url 関数でクリーニングし、安全な形式で出力します。

サンプルコード 2

$url = 'ftp://example.com/resource';
$sanitized_url = esc_url($url, array('http', 'https'));
echo $sanitized_url; // 出力は空文字列

このサンプルコードでは、FTPプロトコルを含むURLをクリーニングし、HTTPとHTTPS以外のプロトコルは排除されるため、空文字列が出力されます。

サンプルコード 3

$url = 'http://example.com/valid-url/';
$sanitized_url = esc_url($url);
if ($sanitized_url) {
    echo '<a href="' . $sanitized_url . '">Click Here</a>';
}

このサンプルコードは、有効なURLをクリーニングし、その結果を使用して安全なリンクを生成します。

サンプルコード 4

$input_url = 'javascript:void(0)';
$sanitized_url = esc_url($input_url);
if (empty($sanitized_url)) {
    echo 'Invalid URL!';
}

このサンプルコードでは、無効なJavaScript URLをクリーニングし、結果が空であることをチェックします。

サンプルコード 5

$urls = array(
    'http://example.com',
    'https://secure.com',
    'ftp://notallowed.com'
);

foreach ($urls as $url) {
    echo esc_url($url) . '<br>';
}

このサンプルコードは、配列内の複数のURLをクリーニングし、それぞれの結果を改行して出力します。

この関数のアクションでの使用可能性

アクション名 使用例
mu_plugin_loaded
registered_post_type
plugins_loaded
wp_roles_init
setup_theme
after_setup_theme
set_current_user
init
register_sidebar
wp_loaded
send_headers
parse_query
pre_get_posts
wp
template_redirect
get_header
wp_head

非推奨または削除されたワードプレスバージョン

  • 特に非推奨または削除されたバージョンはありません。

この関数について質問する


上の計算式の答えを入力してください