get_page_link()

get_page_link()
目次

get_page_link()とは?

get_page_link()
固定ページ(Page)のパーマリンク(URL)を取得するための関数
です。

WordPressでは、投稿(Post)と固定ページ(Page)は別のエンティティとして扱われます。
固定ページは通常「会社概要」「お問い合わせ」などに利用され、投稿とはURLの生成ロジックが微妙に異なります。

このため、get_permalink()とは別に、固定ページ専用の get_page_link() が用意されています。

get_page_link()の基本的な書式

get_page_link( int|WP_Post $post = null, bool $leavename = false, bool $sample = false )

get_page_link()の引数

引数説明
$postint / WP_Post / null取得するページのIDまたはオブジェクト(省略時は現在のループのページ)
$leavenamebooltrueにするとスラッグ部分が%pagename%のままになる
$samplebooltrueにするとサンプルパーマリンクを返す(管理画面用)

get_page_link()の戻り値

文字列(URL)

get_permalink()との違い

混同しやすいのですが、基本的にはどちらでも固定ページのURLは取得できます。

ただ、内部的には微妙な違いがあります。

関数特徴
get_permalink()投稿・固定ページ・カスタム投稿すべてに対応する汎用関数
get_page_link()固定ページ用のURLを生成する専用関数(内部的にpage_linkフィルターが適用される)

コアの実装

実際のWordPressコアでは get_page_link()get_permalink()を呼び出すだけでなく、URLをフィルタリングしています。

function get_page_link( $post = false, $leavename = false, $sample = false ) {
    global $wp_rewrite;
    $post = get_post( $post );

    if ( 'page' !== $post->post_type ) {
        return get_permalink( $post, $leavename, $sample );
    }

    $link = $wp_rewrite->get_page_permastruct();
    // (中略:URL組み立て)
    return apply_filters( 'page_link', $link, $post->ID, $sample );
}

つまり、page_linkフィルターを通すことが大きな違いです。

get_page_link()のよく使う例

1. 固定ページIDを指定

$url = get_page_link(42);
echo '<a href="' . esc_url($url) . '">会社概要ページへ</a>';

2. WP_Postオブジェクトを指定

$page = get_post(42);
$url = get_page_link($page);

3. 現在ループ中のページ

ループ中なら引数は省略できます。

while (have_posts()) : the_post();
  $url = get_page_link();
endwhile;

4. サンプルパーマリンク(管理画面)

$url = get_page_link(42, false, true);

この場合、URLに %pagename% が残ります。

$leavenameの用途

$leavename = true にするとスラッグ部分がそのまま %pagename% のままになります。

例:

$url = get_page_link(42, true);

出力例:

https://example.com/%pagename%/

これは管理画面でスラッグを置き換える際に使います。

フィルターフック

get_page_link() では page_link フィルターが呼ばれます。

これを利用するとURLを自由に変更できます。

例:URLにクエリを追加

add_filter('page_link', 'add_ref_query_to_page_link', 10, 3);

function add_ref_query_to_page_link($link, $post_id, $sample) {
    return $link . '?ref=custom';
}

クエリパラメータを動的に付加

add_query_arg() を組み合わせると便利です。

$url = add_query_arg('utm_source', 'newsletter', get_page_link(42));

結果:

https://example.com/about/?utm_source=newsletter

アンカーを付ける

$url = get_page_link(42) . '#contact-form';

get_permalink()との互換性

結論として、固定ページでも get_permalink() を使うことが多く、実質的な違いはほぼありません。

ただし、**プラグインやテーマでURLを書き換える場合に、page_linkフィルターを利用したいときはget_page_link()**を使うのがベストです。

get_page_link()の実用例

会社概要ページへのリンク

$about_id = 42;
$url = get_page_link($about_id);
?>
<a href="<?php echo esc_url($url); ?>">会社概要</a>

フッターに固定ページ一覧

<?php
$pages = get_pages();
foreach ($pages as $page) {
  $url = get_page_link($page->ID);
  echo '<li><a href="' . esc_url($url) . '">' . esc_html($page->post_title) . '</a></li>';
}
?>

ボタンリンク

<a class="cta-button" href="<?php echo esc_url(get_page_link(42)); ?>">
  お問い合わせ
</a>

CSS例:

.cta-button {
  display: inline-block;
  padding: 10px 20px;
  background: #0073aa;
  color: #fff;
  text-decoration: none;
  border-radius: 4px;
}
.cta-button:hover {
  background: #005177;
}

get_page_link()のよくある質問

投稿にも使える?

投稿では get_permalink() を使います。get_page_link() は固定ページ専用です。

カスタム投稿タイプでは?

カスタム投稿は get_permalink() を使います。get_page_link()post_type = pageだけ対応。

URLを変数に入れる?

可能です。

$url = get_page_link(42);
結果をそのまま出力してもいい?

hrefに入れるときは必ず esc_url() を使いましょう。

get_page_link()のまとめ

  • get_page_link()は固定ページ専用のパーマリンク取得関数
  • $leavename$sampleで特殊なURLを取得できる
  • 内部で page_link フィルターが適用される
  • 新規開発でも固定ページでは使用価値あり
  • 投稿・カスタム投稿は get_permalink() を使う

活用ポイント

  • 固定ページに特化したURL取得にはget_page_link()
  • 投稿やカスタム投稿はget_permalink()
  • esc_url()で安全に出力
  • フィルターで動的にURLを加工
よかったらシェアしてね!
  • URLをコピーしました!
  • URLをコピーしました!

この記事を書いた人

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

目次