
get_permalink()とは?
get_permalink()
は、
特定の投稿(記事・固定ページ・カスタム投稿タイプ)のパーマリンク(URL)を取得する
WordPressの組み込み関数です。
「the_permalink()」と似ていますが、こちらはURLを文字列として返すため、
・変数に格納
・加工
・条件分岐
など柔軟に扱えるのが特徴です。
パーマリンクとは?
パーマリンク(Permalink)とは、投稿やページごとに割り当てられた固有のURLのことです。
管理画面 → [設定] → [パーマリンク設定] で形式を変更できます。
スラッグ形式
https://example.com/sample-post/
数字ベース形式
https://example.com/?p=123
get_permalink()
はこれらの設定を自動で反映します。
get_permalink()の基本的な書式
get_permalink( int|WP_Post|null $post = null, bool $leavename = false )
get_permalink()の引数
引数 | 型 | 説明 |
---|---|---|
$post | int / WP_Post / null | URLを取得する投稿のIDまたは投稿オブジェクト。null の場合は現在の投稿(ループ内) |
$leavename | bool | true にするとURLの末尾に %postname% を残す(滅多に使わない) |
get_permalink()の戻り値
文字列(URL)
get_permalink()の使い方の例
1. ループ内で現在の投稿URLを取得
<?php if (have_posts()) : while (have_posts()) : the_post(); ?>
<a href="<?php echo esc_url(get_permalink()); ?>">
<?php the_title(); ?>
</a>
<?php endwhile; endif; ?>
ループ中なら $post
を指定しなくてOK。
2. 投稿IDを指定する
特定の投稿(たとえばID=42)のURLを取得:
$url = get_permalink(42);
echo '<a href="' . esc_url($url) . '">投稿42を読む</a>';
3. カスタム投稿タイプ
カスタム投稿も同様に取得可能:
$id = 123; // カスタム投稿のID
$url = get_permalink($id);
get_permalink()とthe_permalink()の違い
とても混同しやすいので表で比較します。
関数 | 戻り値 | 用途 |
---|---|---|
get_permalink() | URLを返す(return) | 変数に格納・加工 |
the_permalink() | URLを出力する(echo) | 直接HTMLに埋め込む |
例:the_permalink()
<a href="<?php the_permalink(); ?>">
<?php the_title(); ?>
</a>
同じことをget_permalink()で書くと:
<a href="<?php echo esc_url(get_permalink()); ?>">
<?php the_title(); ?>
</a>
URLを加工する
取得したURLを加工して使うことが多いです。
1. アンカーリンクを付与
$url = get_permalink() . '#comments';
echo '<a href="' . esc_url($url) . '">コメントを見る</a>';
2. クエリパラメータを付与
$url = add_query_arg('ref', 'newsletter', get_permalink());
出力:
https://example.com/sample-post/?ref=newsletter
$leavenameの活用
$leavename = true
にすると、URL末尾に%postname%
を残します。
例:
get_permalink(42, true);
出力:
https://example.com/%postname%/
これはURLテンプレートを取得したい特別な場合にだけ使います。
フィルターフック
get_permalink()
は内部で**post_link
**というフィルターを呼びます。
これを使うと、出力URLを動的に変更できます。
例:URL末尾に?ref=customを付加
add_filter('post_link', 'add_custom_ref', 10, 3);
function add_custom_ref($permalink, $post, $leavename) {
return $permalink . '?ref=custom';
}
カスタム用途の例
アイキャッチ画像にリンク
<a href="<?php echo esc_url(get_permalink()); ?>">
<?php the_post_thumbnail('medium'); ?>
</a>
ボタン風リンク
<a class="read-more" href="<?php echo esc_url(get_permalink()); ?>">
続きを読む
</a>
CSS:
.read-more {
display: inline-block;
background: #0073aa;
color: #fff;
padding: 8px 12px;
border-radius: 4px;
text-decoration: none;
}
.read-more:hover {
background: #005177;
}
注意点とベストプラクティス
esc_url()で必ずエスケープする
取得したURLは href
に埋め込む前に必ず esc_url()
を使いましょう。
ループ外では$postを指定する
ループ外で使う場合は必ず投稿IDを指定します。
カスタム投稿も同じ使い方
カスタム投稿でも問題なくURLを取得できます。
get_permalink()のよくある質問
- パーマリンク設定でURLが変わる?
-
はい。パーマリンク形式に応じて自動でURLが生成されます。
- ループ外でIDを指定しないと?
-
$post
が未定義のためエラーになります。 - 投稿が存在しないIDを指定すると?
-
false
が返ります。
get_permalink()のまとめ
get_permalink()
は投稿URLを取得する基本関数- ループ内ならID不要、ループ外はID必須
- 文字列を返すので変数格納・加工が自由
esc_url()
でエスケープして安全に出力the_permalink()
との違いを理解して使い分ける
活用のポイント
- 投稿リンクやボタンリンクで必ず使う
- クエリやアンカーを組み合わせる
- カスタム投稿や固定ページも同様に対応