「WordPressでサイトのURLを取得したいけど、どの関数を使えばいいの?」
テーマやプラグインをカスタマイズしていると、さまざまな場面でURLを取得する必要が出てきますよね。トップページのURL、現在のページのURL、画像のURLなど、取得したいURLの種類はさまざまです。
実は、WordPressにはURLを取得するための便利な関数がたくさん用意されています。でも、似たような名前の関数が多くて、どれを使えばいいのか迷ってしまうことも多いでしょう。
この記事では、WordPressでURLを取得するための各種関数を、目的別に分かりやすく解説します。コピペで使えるサンプルコードも豊富に紹介するので、ぜひ参考にしてください。
WordPressのURL取得関数の基本

まず、WordPressでよく使われる主なURL取得関数を理解しておきましょう。
関数の基本的な違い
WordPressには、用途に応じて使い分ける複数のURL取得関数があります。
取得する関数と出力する関数
- 取得する関数:URLを文字列として返すだけ(例:
get_permalink()) - 出力する関数:URLを直接画面に表示する(例:
the_permalink())
PHPのコード内で変数に格納したり、条件分岐に使ったりする場合は「取得する関数」を使います。テンプレートファイルでそのまま表示したい場合は「出力する関数」が便利ですよ。
エスケープについて
URLを出力する際は、セキュリティのためにエスケープ処理(特殊文字を安全な形式に変換すること)が推奨されます。
esc_url() という関数を使えば、安全にURLを出力できます。
<a href="<?php echo esc_url( home_url() ); ?>">トップページ</a>
これは基本的なセキュリティ対策なので、覚えておいてくださいね。
サイトのトップページURLを取得する
サイト全体に関するURLを取得する方法を見ていきましょう。
home_url() – ホームページのURL
home_url() は、サイトのフロントページ(トップページ)のURLを取得する関数です。
<?php echo home_url(); ?>
// 出力例:https://example.com
パスを指定することで、特定のページのURLも作成できます。
<?php echo home_url( '/about/' ); ?>
// 出力例:https://example.com/about/
使用場面
- サイトロゴのリンク先
- メニューのホームリンク
- 相対URLから絶対URLを作成するとき
site_url() – WordPress管理画面のURL
site_url() は、WordPressがインストールされているディレクトリのURLを取得します。
通常は home_url() と同じ結果になりますが、WordPressをサブディレクトリにインストールしている場合は異なる値を返すんです。
<?php echo site_url(); ?>
// 出力例:https://example.com/wp
home_url()とsite_url()の違い
例えば、以下のような設定の場合:
- サイトアドレス(home_url):https://example.com
- WordPressアドレス(site_url):https://example.com/wp
home_url(); // https://example.com
site_url(); // https://example.com/wp
一般的なサイト構築では home_url() を使うことが多いでしょう。
admin_url() – 管理画面のURL
admin_url() は、WordPress管理画面のURLを取得します。
<?php echo admin_url(); ?>
// 出力例:https://example.com/wp-admin/
特定の管理ページのURLも取得できます。
<?php echo admin_url( 'options-general.php' ); ?>
// 出力例:https://example.com/wp-admin/options-general.php
使用場面
- プラグインやテーマで管理画面へのリンクを作成
- 設定ページへの誘導リンク
現在のページのURLを取得する
表示中のページのURLを取得する方法はいくつかあります。
get_permalink() – 投稿・固定ページのURL
get_permalink() は、投稿や固定ページのパーマリンク(URL)を取得する関数です。
<?php echo get_permalink(); ?>
// 現在の投稿のURL
投稿IDを指定すれば、その投稿のURLを取得できます。
<?php echo get_permalink( 123 ); ?>
// ID 123の投稿のURL
出力する関数版
<a href="<?php the_permalink(); ?>">記事タイトル</a>
the_permalink() は、URLを直接出力するバージョンです。ループ内でよく使われますね。
現在のページの完全なURLを取得
アーカイブページやカテゴリーページなど、投稿以外のページでは異なる方法が必要です。
方法1:WordPressのグローバル変数を使う
<?php
global $wp;
$current_url = home_url( add_query_arg( array(), $wp->request ) );
echo $current_url;
?>
方法2:PHPのスーパーグローバル変数を使う
<?php
$current_url = ( is_ssl() ? 'https://' : 'http://' ) . $_SERVER['HTTP_HOST'] . $_SERVER['REQUEST_URI'];
echo esc_url( $current_url );
?>
この方法は、クエリパラメータ(?以降の部分)も含めた完全なURLを取得できます。
方法3:簡易版
WordPress 4.0以降なら、よりシンプルに書けます。
<?php
$current_url = home_url( $wp->request );
echo $current_url;
?>
get_pagenum_link() – ページネーションのURL
get_pagenum_link() は、ページネーション(ページ番号)付きのURLを取得します。
<?php echo get_pagenum_link( 2 ); ?>
// 2ページ目のURL
// 出力例:https://example.com/page/2/
使用場面
- カスタムページネーションの実装
- 前のページ・次のページへのリンク作成

カテゴリー・タグ・タクソノミーのURLを取得
アーカイブページのURLを取得する方法です。
get_category_link() – カテゴリーページのURL
get_category_link() は、カテゴリーアーカイブページのURLを取得します。
<?php
$category_id = 5;
echo get_category_link( $category_id );
?>
// 出力例:https://example.com/category/news/
カテゴリーIDは、管理画面の「投稿」→「カテゴリー」で確認できますよ。
get_tag_link() – タグページのURL
get_tag_link() は、タグアーカイブページのURLを取得します。
<?php
$tag_id = 10;
echo get_tag_link( $tag_id );
?>
// 出力例:https://example.com/tag/wordpress/
get_term_link() – タクソノミーページのURL
get_term_link() は、カスタムタクソノミーを含む、あらゆるタームのURLを取得できる汎用的な関数です。
<?php
$term_id = 15;
$taxonomy = 'product_category';
echo get_term_link( $term_id, $taxonomy );
?>
カテゴリーやタグにも使えます。
<?php echo get_term_link( 5, 'category' ); ?>
get_author_posts_url() – 著者アーカイブのURL
get_author_posts_url() は、特定の著者の投稿一覧ページのURLを取得します。
<?php
$author_id = 1;
echo get_author_posts_url( $author_id );
?>
// 出力例:https://example.com/author/admin/
画像・メディアのURLを取得
画像ファイルなどのメディアのURLを取得する方法です。
wp_get_attachment_url() – メディアファイルのURL
wp_get_attachment_url() は、アップロードしたメディアファイルの完全なURLを取得します。
<?php
$attachment_id = 100;
echo wp_get_attachment_url( $attachment_id );
?>
// 出力例:https://example.com/wp-content/uploads/2024/01/image.jpg
wp_get_attachment_image_src() – 画像のURL(サイズ指定可)
wp_get_attachment_image_src() は、指定したサイズの画像URLを取得できます。
<?php
$attachment_id = 100;
$image_size = 'thumbnail'; // サムネイルサイズ
$image = wp_get_attachment_image_src( $attachment_id, $image_size );
if ( $image ) {
echo $image[0]; // URL
echo $image[1]; // 幅
echo $image[2]; // 高さ
}
?>
サイズの種類
thumbnail:サムネイルmedium:中サイズlarge:大サイズfull:オリジナルサイズ- カスタムサイズ名
get_the_post_thumbnail_url() – アイキャッチ画像のURL
get_the_post_thumbnail_url() は、投稿のアイキャッチ画像のURLを簡単に取得できます。
<?php
$thumbnail_url = get_the_post_thumbnail_url( get_the_ID(), 'large' );
if ( $thumbnail_url ) {
echo $thumbnail_url;
}
?>
ループ内で使う場合は、投稿IDを省略できます。
<?php echo get_the_post_thumbnail_url( null, 'medium' ); ?>
テーマ・プラグインのディレクトリURLを取得
テーマやプラグインのファイルにアクセスするためのURL取得方法です。
get_template_directory_uri() – 親テーマのディレクトリURL
get_template_directory_uri() は、親テーマのディレクトリURLを取得します。
<?php echo get_template_directory_uri(); ?>
// 出力例:https://example.com/wp-content/themes/my-theme
使用例:CSSファイルの読み込み
<link rel="stylesheet" href="<?php echo get_template_directory_uri(); ?>/style.css">
get_stylesheet_directory_uri() – 有効なテーマのディレクトリURL
get_stylesheet_directory_uri() は、現在有効なテーマ(子テーマを使用している場合は子テーマ)のディレクトリURLを取得します。
<?php echo get_stylesheet_directory_uri(); ?>
// 子テーマ使用時:https://example.com/wp-content/themes/my-child-theme
// 親テーマのみ:https://example.com/wp-content/themes/my-theme
子テーマを使っている場合は、通常こちらを使います。
使用例:JavaScriptファイルの読み込み
<script src="<?php echo get_stylesheet_directory_uri(); ?>/js/script.js"></script>
plugins_url() – プラグインディレクトリのURL
plugins_url() は、プラグインディレクトリ内のファイルのURLを取得します。
<?php
// プラグインファイル内で使用
echo plugins_url( 'js/script.js', __FILE__ );
?>
// 出力例:https://example.com/wp-content/plugins/my-plugin/js/script.js
content_url() – wp-contentディレクトリのURL
content_url() は、wp-contentディレクトリのURLを取得します。
<?php echo content_url(); ?>
// 出力例:https://example.com/wp-content
パスを指定することもできます。
<?php echo content_url( '/uploads/2024/01/' ); ?>
// 出力例:https://example.com/wp-content/uploads/2024/01/
REST APIやAjaxで使うURL取得
JavaScriptからアクセスするためのURL取得方法です。
rest_url() – REST APIのURL
rest_url() は、WordPress REST APIのエンドポイントURLを取得します。
<?php echo rest_url(); ?>
// 出力例:https://example.com/wp-json/
特定のエンドポイントのURLも取得できます。
<?php echo rest_url( 'wp/v2/posts' ); ?>
// 出力例:https://example.com/wp-json/wp/v2/posts
admin_url() でAjax URLを取得
Ajax通信用のURLは、admin-ajax.phpを使います。
<?php echo admin_url( 'admin-ajax.php' ); ?>
// 出力例:https://example.com/wp-admin/admin-ajax.php
JavaScriptに渡す方法
<script>
var ajaxUrl = '<?php echo admin_url( 'admin-ajax.php' ); ?>';
</script>
または、wp_localize_script() を使う方法が推奨されます。
wp_localize_script( 'my-script', 'myAjax', array(
'ajaxUrl' => admin_url( 'admin-ajax.php' )
) );
実践的な使用例
実際の開発でよく使われるパターンを紹介します。
例1:カスタムメニューにホームリンクを追加
<nav>
<a href="<?php echo esc_url( home_url( '/' ) ); ?>">ホーム</a>
<?php wp_nav_menu( array( 'theme_location' => 'primary' ) ); ?>
</nav>
例2:ロゴ画像を表示
<?php
$logo_url = get_template_directory_uri() . '/images/logo.png';
?>
<a href="<?php echo esc_url( home_url( '/' ) ); ?>">
<img src="<?php echo esc_url( $logo_url ); ?>" alt="サイトロゴ">
</a>
例3:関連記事のリンクを作成
<?php
$related_posts = get_posts( array( 'category__in' => wp_get_post_categories( get_the_ID() ) ) );
foreach ( $related_posts as $post ) :
setup_postdata( $post );
?>
<a href="<?php echo esc_url( get_permalink( $post->ID ) ); ?>">
<?php echo get_the_title( $post->ID ); ?>
</a>
<?php
endforeach;
wp_reset_postdata();
?>
例4:パンくずリストの作成
<div class="breadcrumb">
<a href="<?php echo esc_url( home_url( '/' ) ); ?>">ホーム</a>
<?php
if ( is_category() ) {
$category = get_queried_object();
echo ' > <a href="' . esc_url( get_category_link( $category->term_id ) ) . '">' . $category->name . '</a>';
} elseif ( is_single() ) {
$categories = get_the_category();
if ( $categories ) {
echo ' > <a href="' . esc_url( get_category_link( $categories[0]->term_id ) ) . '">' . $categories[0]->name . '</a>';
}
echo ' > ' . get_the_title();
}
?>
</div>
例5:ソーシャルシェアボタンの作成
<?php
$current_url = urlencode( get_permalink() );
$title = urlencode( get_the_title() );
?>
<a href="https://twitter.com/intent/tweet?url=<?php echo $current_url; ?>&text=<?php echo $title; ?>" target="_blank">
Twitterでシェア
</a>
<a href="https://www.facebook.com/sharer/sharer.php?u=<?php echo $current_url; ?>" target="_blank">
Facebookでシェア
</a>
よくある質問と回答

home_url()とsite_url()はどう使い分ける?
基本的には home_url() を使えば問題ありません。site_url() は、WordPressの管理機能に関連するファイル(wp-login.phpなど)にアクセスする際に使います。
URLの末尾のスラッシュは必要?
一貫性を保つため、付ける場合は常に付ける、付けない場合は常に付けないようにしましょう。
home_url( '/' ) // スラッシュあり
home_url() // スラッシュなし
どちらでも動作しますが、サイト全体で統一することが大切です。
http://とhttps://はどう判定される?
WordPressの設定に従って自動的に判定されます。「設定」→「一般」で設定されたプロトコルが使われますよ。
相対URLと絶対URLはどちらを使うべき?
WordPressでは、絶対URL(https://から始まる完全なURL)の使用が推奨されます。上記の関数はすべて絶対URLを返すので、そのまま使えば大丈夫です。
まとめ:目的に応じて適切な関数を使おう
WordPressでURLを取得する方法について、詳しく解説しました。
重要なポイントをおさらい
- サイトトップページ:
home_url() - 現在の投稿・固定ページ:
get_permalink() - カテゴリー・タグ:
get_category_link()/get_tag_link() - 画像・メディア:
wp_get_attachment_url() - テーマディレクトリ:
get_stylesheet_directory_uri() - URLを出力する際は
esc_url()でエスケープ
最初は関数が多くて混乱するかもしれませんが、使っているうちに自然と覚えられます。この記事をブックマークしておいて、必要なときに参照してくださいね。
あなたのWordPressカスタマイズが、よりスムーズに進むことを願っています!


コメント