
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_link
やpage_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)