WordPressでURLを取得する方法!目的別の関数と使い方を完全解説

Web

「WordPressでサイトのURLを取得したいけど、どの関数を使えばいいの?」

テーマやプラグインをカスタマイズしていると、さまざまな場面でURLを取得する必要が出てきますよね。トップページのURL、現在のページのURL、画像のURLなど、取得したいURLの種類はさまざまです。

実は、WordPressにはURLを取得するための便利な関数がたくさん用意されています。でも、似たような名前の関数が多くて、どれを使えばいいのか迷ってしまうことも多いでしょう。

この記事では、WordPressでURLを取得するための各種関数を、目的別に分かりやすく解説します。コピペで使えるサンプルコードも豊富に紹介するので、ぜひ参考にしてください。

スポンサーリンク
  1. WordPressのURL取得関数の基本
    1. 関数の基本的な違い
    2. エスケープについて
  2. サイトのトップページURLを取得する
    1. home_url() – ホームページのURL
    2. site_url() – WordPress管理画面のURL
    3. admin_url() – 管理画面のURL
  3. 現在のページのURLを取得する
    1. get_permalink() – 投稿・固定ページのURL
    2. 現在のページの完全なURLを取得
    3. get_pagenum_link() – ページネーションのURL
    4. get_category_link() – カテゴリーページのURL
    5. get_tag_link() – タグページのURL
    6. get_term_link() – タクソノミーページのURL
    7. get_author_posts_url() – 著者アーカイブのURL
  4. 画像・メディアのURLを取得
    1. wp_get_attachment_url() – メディアファイルのURL
    2. wp_get_attachment_image_src() – 画像のURL(サイズ指定可)
    3. get_the_post_thumbnail_url() – アイキャッチ画像のURL
  5. テーマ・プラグインのディレクトリURLを取得
    1. get_template_directory_uri() – 親テーマのディレクトリURL
    2. get_stylesheet_directory_uri() – 有効なテーマのディレクトリURL
    3. plugins_url() – プラグインディレクトリのURL
    4. content_url() – wp-contentディレクトリのURL
  6. REST APIやAjaxで使うURL取得
    1. rest_url() – REST APIのURL
    2. admin_url() でAjax URLを取得
  7. 実践的な使用例
    1. 例1:カスタムメニューにホームリンクを追加
    2. 例2:ロゴ画像を表示
    3. 例3:関連記事のリンクを作成
    4. 例4:パンくずリストの作成
    5. 例5:ソーシャルシェアボタンの作成
  8. よくある質問と回答
    1. home_url()とsite_url()はどう使い分ける?
    2. URLの末尾のスラッシュは必要?
    3. http://とhttps://はどう判定される?
    4. 相対URLと絶対URLはどちらを使うべき?
  9. まとめ:目的に応じて適切な関数を使おう

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カスタマイズが、よりスムーズに進むことを願っています!

コメント

タイトルとURLをコピーしました