the_permalink()

the_permalink()
目次

the_permalink()とは?

the_permalink()
現在の投稿・固定ページのURL(パーマリンク)を出力するテンプレートタグ
です。

記事タイトルやサムネイルをクリックしたときに、その記事の詳細ページへ移動させるリンクを作るのに欠かせません。

パーマリンクとは?

パーマリンク (Permalink) とは、
「投稿やページごとに割り当てられた固有のURL」
のことです。

例:

  • https://example.com/2025/07/03/sample-post/
  • https://example.com/?p=123

WordPressでは管理画面の[設定]→[パーマリンク設定]で形式を変更できます。

the_permalink()の基本的な使い方

the_permalink()はとてもシンプルで、引数を取らずに使えます。

<a href="<?php the_permalink(); ?>">
  <?php the_title(); ?>
</a>

これだけで、タイトルをクリックすると詳細ページに遷移するリンクが完成します。

the_permalink()の戻り値

戻り値: なし
この関数はURLを返さず、その場で echo するだけです。

the_permalink()のサンプルコード

WordPressループ内での基本例:

<?php if ( have_posts() ) : while ( have_posts() ) : the_post(); ?>
  <h2>
    <a href="<?php the_permalink(); ?>">
      <?php the_title(); ?>
    </a>
  </h2>
<?php endwhile; endif; ?>

このようにループ内で呼び出すと、各記事のURLを出力します。

get_permalink()との違い

非常によく混同されますが、the_permalink()get_permalink()は別物です。

関数戻り値用途
the_permalink()echo(その場で出力)HTMLに直接書く場合
get_permalink()文字列として返す変数に格納したい場合

get_permalink()の例

例えばURLを変数に取得したい場合:

<?php
$url = get_permalink();
?>
<a href="<?php echo esc_url($url); ?>">リンク</a>

シングル投稿IDを指定する

get_permalink()は投稿IDを指定できますが、the_permalink()現在の投稿しか扱えません。

例:get_permalink()でID指定

$url = get_permalink(42); // 投稿ID=42のURL

the_permalink()には引数がないので、使えるのはループ内またはsetup_postdata()で設定した投稿に限られます。

パーマリンク構造の影響

パーマリンクURLは管理画面の「パーマリンク設定」で変わります。

「日付と投稿名」形式

https://example.com/2025/07/03/sample-post/

「基本」形式

https://example.com/?p=123

the_permalink()はこの設定を自動で反映します。

the_permalink()のよく使う応用例

アイキャッチ画像をリンクにする

<a href="<?php the_permalink(); ?>">
  <?php the_post_thumbnail('medium'); ?>
</a>

ボタン風リンク

<a class="read-more-button" href="<?php the_permalink(); ?>">
  続きを読む
</a>

CSS

.read-more-button {
  display: inline-block;
  background: #0073aa;
  color: #fff;
  padding: 8px 16px;
  text-decoration: none;
  border-radius: 4px;
}
.read-more-button:hover {
  background: #005177;
}

WordPressループ外で使う

the_permalink()はループ外では使えません。

ループ外でURLが欲しい場合は必ずget_permalink()を使い、投稿IDを指定します。

例:

<?php
$url = get_permalink(123);
?>
<a href="<?php echo esc_url($url); ?>">投稿123へのリンク</a>

セキュリティとエスケープ

the_permalink()は自動的にesc_url()でエスケープされています。
そのため基本的にhrefに直接使って問題ありません。

ただし、get_permalink()の戻り値を使う場合は自分でesc_url()を適用しましょう。

フィルターフック

パーマリンクを動的に変更したいときは、
post_linkpage_linkなどのフィルターフックを使います。

例:全投稿URLの末尾にクエリを付加

add_filter('post_link', 'add_query_to_permalink', 10, 3);
function add_query_to_permalink($permalink, $post, $leavename) {
  return $permalink . '?ref=custom';
}

よくある質問

URLを変数に入れたい

get_permalink()を使う

ループ外で使えない

the_permalink()はループ専用。ループ外はget_permalink()+投稿IDを利用

カスタム投稿タイプも対応する?

はい。the_permalink()は投稿タイプを問わず使えます。

パーマリンクをカスタマイズできる?

管理画面の「パーマリンク設定」で変更可能

the_permalink()のまとめ

  • the_permalink()はループ内で現在の投稿URLを出力
  • 文字列取得はget_permalink()
  • ループ外ではget_permalink(投稿ID)を使用
  • URLはパーマリンク設定を反映
  • esc_url()によるエスケープは自動適用済み

活用ポイント

  • タイトル・画像のリンクは必ずthe_permalink()
  • URLを変数にしたいときはget_permalink()
  • 投稿IDで取得するときはget_permalink(ID)
よかったらシェアしてね!
  • URLをコピーしました!
  • URLをコピーしました!

この記事を書いた人

初めてホームページを作成したのは1996年。
2000年よりフリーランスで主に中小企業、学校、各種公的団体、個人事業主のWordPressを活用したホームページ制作を行っています。WordPressテーマはそれぞれのクライアントに合わせて作成しています。
WordPressを活用したサイト運営のための情報発信をしていきます。

目次