閉じる

WordPressのhome_urlとget_template_directory_uriの違いと正しい使い分けを解説

WordPressのテーマ開発やカスタマイズを行っていると、サイト内のリンクやアセット(画像やCSSなど)のパスを指定する機会が頻繁にあります。

その際によく使われる関数がhome_url()get_template_directory_uri()ですが、これら二つの違いを正確に理解できていないと、リンク切れや予期せぬエラーの原因となります。

特にパスの出力先が「サイトのトップページ」なのか「テーマファイルが置かれている場所」なのかという点は、WordPress開発におけるもっとも基本的な使い分けの一つです。

本記事では、2026年現在のモダンな開発手法も踏まえながら、これら二つの関数の具体的な違いと、現場で役立つ正しい使い分けについて詳しく解説します。

home_url()の役割と使い方

home_url()は、WordPressの設定で指定されているサイトのホームURL(トップページ)を取得するための関数です。

ユーザーがブラウザの検索窓に入力してアクセスする、いわば「Webサイトの玄関口」のURLを基準としたパスを生成します。

主な用途と特徴

この関数は、主にお問い合わせページへのリンクや、ロゴをクリックした際のトップページへの戻り先などを記述する際に使用されます。

引数を渡さずに実行すると、サイトのホームURLをそのまま返します。

引数にパスを指定することで、ホームURLに特定の文字列を連結した状態で取得することも可能です。

home_url()の使用例

具体的なコードの書き方を確認してみましょう。

PHP
<?php
// トップページのURLを出力する
echo esc_url( home_url() );

// 特定の固定ページ(例:contact)へのURLを出力する
echo esc_url( home_url( '/contact/' ) );
?>

上記のコードを実行した場合、以下のような結果が出力されます(サイトのドメインが example.com の場合)。

実行結果
https://example.com
https://example.com/contact/

注意点:esc_url()との併用

URLを出力する際は、セキュリティ上の理由から必ずesc_url()関数でエスケープ処理を行うことが推奨されます。

これは、不正なスクリプトの注入を防ぎ、サイトの安全性を高めるための重要な習慣です。

get_template_directory_uri()の役割と使い方

一方、get_template_directory_uri()は、現在有効化されている親テーマのディレクトリURLを取得する関数です。

サイトそのもののURLではなく、サーバー内に配置された「テーマフォルダ」の場所を指し示します。

主な用途と特徴

この関数は、テーマ内にある画像ファイルを表示したり、CSSやJavaScriptファイルを読み込んだりする際に使用されます。

テーマを移行したり、開発環境から本番環境へアップロードしたりしても、自動的に正しいパスを追従してくれるため、ハードコーディングを避けるために必須の関数です。

get_template_directory_uri()の使用例

テーマフォルダ内の assets/images/logo.png を表示する場合の記述は以下の通りです。

PHP
<?php
// テーマフォルダ内の画像パスを取得する
echo esc_url( get_template_directory_uri() ) . '/assets/images/logo.png';
?>

実行結果は以下のようになります(テーマ名が my-theme の場合)。

実行結果
https://example.com/wp-content/themes/my-theme/assets/images/logo.png

注意点:末尾のスラッシュ

get_template_directory_uri()は、戻り値の末尾にスラッシュ(/)を含みません。

そのため、パスを繋げる際には必ず . '/path/to/file' のように、先頭にスラッシュを記述する必要があります。

home_url()とget_template_directory_uri()の決定的な違い

これら二つの関数の違いを一言で表すと、「参照している場所がサイトのルートか、テーマのルートか」という点に集約されます。

以下の比較表で、その違いを整理してみましょう。

比較項目home_url()get_template_directory_uri()
取得するURLの基準サイトのトップページ(ホーム)有効化されている親テーマのフォルダ
主な用途ページ遷移(aタグのhref属性)アセットの読み込み(img, link, script)
戻り値の例https://example.comhttps://example.com/wp-content/themes/my-theme
引数の有無パスを指定可能引数なし

どちらを使うべきか判断する基準

ユーザーがクリックして別のページに移動するためのURLが必要な場合は、home_url()を選択してください。

ブラウザがファイルを読み込むためのURL(画像、CSS、JSなど)が必要な場合は、get_template_directory_uri()を選択してください。

このルールを徹底するだけで、パス指定に関するミスは劇的に減少します。

実務でよくある間違った使い方と改善策

初心者の方が陥りやすい間違いとして、画像の表示に home_url() を使ってしまうパターンが挙げられます。

間違い:home_url()で画像を表示しようとする

PHP
<!-- 誤った例 -->
<img src="<?php echo esc_url( home_url( '/wp-content/themes/my-theme/images/sample.jpg' ) ); ?>" alt="">

このコードでも画像は表示されますが、テーマ名を変更した際や、WordPressのディレクトリ構成が変わった際に、すべてのコードを書き直さなければなりません。

これは「保守性」が低い状態と言えます。

改善:get_template_directory_uri()を正しく使う

PHP
<!-- 正しい例 -->
<img src="<?php echo esc_url( get_template_directory_uri() ); ?>/images/sample.jpg" alt="">

このように記述することで、テーマフォルダの場所がどこであっても、WordPressが自動的に正しいURLに変換してくれます。

子テーマを使用する場合の注意点

WordPress開発において子テーマを使用している場合、get_template_directory_uri()の挙動には注意が必要です。

親テーマのディレクトリを取得してしまう問題

get_template_directory_uri()は、常に「親テーマ」のディレクトリURLを返します。

子テーマ内に保存した画像やCSSを読み込みたい場合には、この関数を使うとファイルが見つからず、読み込みエラーが発生してしまいます。

子テーマではget_stylesheet_directory_uri()を使用する

子テーマのフォルダ内を参照したい場合は、get_stylesheet_directory_uri()を使用するのが正解です。

PHP
<?php
// 子テーマのディレクトリURLを取得する
echo esc_url( get_stylesheet_directory_uri() );
?>

子テーマが有効化されている場合、この関数は子テーマのフォルダを指します。

一方で、子テーマを使用せずに親テーマのみを運用している場合は、どちらの関数も同じ結果を返します。

将来的に子テーマ化する可能性がある場合は、最初から get_stylesheet_directory_uri() を使っておくとスムーズです。

2026年におけるモダンなURL処理の考え方

近年のWordPress開発では、フルサイト編集(FSE)やブロックテーマの普及により、PHPファイルに直接パスを書く機会は減りつつあります。

しかし、カスタムブロックの開発や、特定の処理を functions.php に記述する際には、依然としてこれらの関数の知識が不可欠です。

依存関係の解決にはwp_enqueue_style/scriptを使う

CSSやJavaScriptを読み込む場合、HTMLタグを直接記述するのではなく、wp_enqueue_style()wp_enqueue_script() を通じて読み込むのがルールです。

この際も、第二引数に get_template_directory_uri() を組み合わせてパスを指定します。

PHP
<?php
add_action( 'wp_enqueue_scripts', function() {
    wp_enqueue_style(
        'my-custom-style',
        get_template_directory_uri() . '/assets/css/main.css',
        array(),
        '1.0.0'
    );
});
?>

このように、WordPressの標準機能と組み合わせて使うことで、プラグインとの競合を避け、読み込み速度の最適化(キャッシュ管理など)も容易になります。

まとめ

WordPressにおけるパス指定の関数は、目的によって明確に使い分ける必要があります。

サイトのトップページや下層ページへのリンクを作成するなら home_url() を使用しましょう。

テーマ内の画像やアセットを読み込むなら get_template_directory_uri() を使用するのが正解です。

また、子テーマを利用する際には get_stylesheet_directory_uri() への切り替えを忘れないようにしてください。

これらの関数を適切に使いこなすことは、保守性が高く、エラーの少ない美しいサイト制作の第一歩となります。

まずは自分の書いているパスが「ユーザーの移動先」なのか「システムの読み込み先」なのかを意識することから始めてみてください。

URLをコピーしました!