get_permalink()

get_permalink()
目次

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()の引数

引数説明
$postint / WP_Post / nullURLを取得する投稿のIDまたは投稿オブジェクト。nullの場合は現在の投稿(ループ内)
$leavenamebooltrueにすると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()との違いを理解して使い分ける

活用のポイント

  • 投稿リンクやボタンリンクで必ず使う
  • クエリやアンカーを組み合わせる
  • カスタム投稿や固定ページも同様に対応
よかったらシェアしてね!
  • URLをコピーしました!
  • URLをコピーしました!

この記事を書いた人

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

目次