
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()の引数
引数 | 型 | 説明 |
---|---|---|
$post | int / WP_Post / null | 取得するページのIDまたはオブジェクト(省略時は現在のループのページ) |
$leavename | bool | true にするとスラッグ部分が%pagename% のままになる |
$sample | bool | true にするとサンプルパーマリンクを返す(管理画面用) |
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を加工