<?php echo esc_url( home_url( '/' ) ); ?>の解釈

WordPressテンプレートを開いてトップページへのリンクを作成しているコードを探すと <?php echo esc_url( home_url( '/' ) ); ?> のようなコードが見つかります。

トップページのURLを出力しているコードですが、どの命令(関数)が何をしているのか1つずつ説明します。

スポンサーリンク


トップページのURLを取得するhome_url

home_url関数はトップページのURL(例:http://example.com/)を取得するときに使います。これは「設定」‐「一般」メニューの「サイトアドレス」のことです。

たとえば、「home_url('/')」のように記述すると、トップページのURLに「/」を付加した文字(例:http://example.com/)が作成されます。単純に「home_url()」とすると「/」は付きません。

【参考】テンプレートタグ/home url - WordPress Codex 日本語版

URLをエスケープするesc_url

esc_url関数はURLをエスケープした文字を返します。エスケープとは、セキュリティ的に問題のない文字に加工する処理だと思ってください。そのまま出力されると問題のある文字を安全な文字に加工する作業です。

これは「サニタイズ」(無害化)とよばれる工程で、サイトのセキュリティ対策として重要な工程です。PHPに慣れていないと思い付かない作業かもしれませんが、実際のテーマから少しずつ実践的なヒントを学ぶようにしましょう。

「esc_url(home_url('/'))」と記述すると、トップページのURLをエスケープした結果が返されます。

どのような効果があるのか簡単な例で説明します。たとえば、次のように末尾にscriptタグが付いたURLがあるとします。

http://example.com/<script>alert("危険なコマンド");</script>

このURLがリンクタグなどに使われたページを表示すると、scriptタグ内のJavaScriptが実行されてしまいます。

危険なコマンドが実行されてしまう
危険なコマンドが実行されてしまう

ここでは文字を表示しているだけですが、JavaScriptを悪用して、さまざまな危険なコマンドが実行される危険があります。これは問題なのでセキュリティ対策としてURLに含まれるJavaScriptを無効にする必要があります。具体的には次のようにesc_urlを通してエスケープ(scriptタグを無効に)する必要があります。

esc_url('https://example.com/<script>alert("危険なコマンド");</script>');

これにより、scriptタグが無効になり危険なコマンドは実行されなくなります。「scriptalert(危険なコマンド);/script」という単純な文字が表示されるだけなのでセキュリティ的に問題ありません。

http://example.com/scriptalert(危険なコマンド);/script

【参考】関数リファレンス/esc url - WordPress Codex 日本語版

画面に文字を表示するecho

echoは画面に文字を表示するPHPの命令です。たとえば、「echo "テスト";」で画面に「テスト」と表示されます。

この例ではesc_urlとhome_urlで組み立てた安全なURLを出力します。つまり、「echo esc_url(home_url('/'));」と記述すると、トップページへのURLが出力されます。その文字をHTMLタグ(aタグ)のhref属性に指定することで、トップページへのリンクが作成されます。

<h1 class="site-title"><a href="<?php echo esc_url( home_url( '/' ) ); ?>" rel="home"><?php bloginfo( 'name' ); ?></a></h1>

(Twenty Seventeenのtemplate-parts/header/site-branding.phpより)

まとめ

ここまでに使った命令をまとめておきます。

  • home_url関数でトップページのURLを取得
  • esc_url関数でURLをエスケープ
  • echoでURLをhref属性に出力

WordPressのPHP