wordpressテンプレートでホームURLとかテーマURLを表示する方法

テンプレートタグでHOMEへのリンクやテーマフォルダへのリンクを結構書くことが多くて、忘れっぽいのでメモ。※テーマのURLは親テーマの場合と子テーマの場合では求め方が違います。

親テーマの場合

親テーマフォルダ内の functions.php に以下を書いて、グローバル変数を定義しておくと便利だと思う。

// 親テーマフォルダへのパス。末尾のスラッシュ無し。
define('THEME_PATH', get_template_directory());
// 親テーマフォルダへのURL。末尾のスラッシュ無し。
define('THEME_URI', get_template_directory_uri());

子テーマの場合

子テーマのフォルダは親テーマの求め方と違う。

下記のコードを子テーマフォルダ内の functions.php に書いて、グローバル変数を定義しておくと便利だと思う。

// 子テーマフォルダへのパス。末尾のスラッシュ無し。
define('THEME_PATH', get_stylesheet_directory());
// 子テーマフォルダへのURL。末尾のスラッシュ無し。
define('THEME_URI', get_stylesheet_directory_uri());

実際に使うとき

※安全のため、タグの属性値内で使うときは esc_url() 関数も使うようにする。

<!-- ホームページのURL -->
<a href="<?php echo esc_url(home_url('/')); ?>">HOME</a>

<!-- テーマファイルのフォルダ下「/img/pic.png」を表示する場合 -->
<img src="<?php echo esc_url(THEME_URI); ?>/img/pic.png" />

esc_url() 関数って何?

要は「URLっぽくない文字列は削除、あとURLっぽかったら属性値で使えるように変換」してくれる関数です。何かの拍子に変な値が入っても安全化できます。

テキストや属性などのURLを無害化する時に用いる関数です。ホワイトリストに登録されているプロトコル (デフォルトでは、http, https, ftp, ftps, mailto, news, irc, gopher, nntp, feed, telnet) 以外のURLを拒絶し、無効なキャラクタを除外し、危険なキャラクタを削除します。 この関数はキャラクタをHTMLエンティティとしてエンコードし、 (X)HTML または XML ドキュメントを作成する時に用います。アンド記号 (&) とシングルクォート (') はそれぞれ (&#038, &#039) という形に変換します。 この関数は非推奨となった clean_url() の代わりに用いるものです。

参照:関数リファレンス/esc url

質問・コメントなどあると嬉しいです