get_post_permalink() は、WordPressで特定の投稿のパーマリンク(URL)を取得するためのテンプレートタグです。
通常の get_permalink() との違いは、投稿内のパラメーター(特に添付ファイルやカスタムリクエスト)の扱いに強みがある点です。特定の投稿の詳細ページやサブクエリ付きの投稿URLを取得したい場合に有用です。
機能の説明
get_post_permalink() は、指定された投稿のパーマリンク(URL)を取得します。IDで投稿を指定することで、特定の投稿やカスタム投稿タイプのURLも取得できます。特に、page_for_posts や クエリ付きのURL 取得が必要な場合に便利です。
- クエリ引数を考慮したURLを取得可能
- 特定のパラメーターを持つ添付ファイルやアーカイブリンクにも対応
- カスタム投稿タイプや投稿IDの使用もサポート
シンプルなコード例
<?php
echo get_post_permalink(123);出力例
https://example.com/sample-post使い方の解説
このテンプレートタグは、特定の投稿IDを指定して、その投稿のURLを取得するために使用されます。通常の get_permalink() では取得できないクエリ文字列がある場合に有用です。ページに付随する特定の状態(例: ページ番号やフィルター条件)を反映させたURLが取得可能です。
- 投稿IDを指定する必要があります。
- URLを取得するだけなので画面には直接出力しません(
echoが必要です)。 - ページネーションやクエリ文字列を利用する際に便利です。
ページIDを指定して投稿URLを取得する
<?php
echo get_post_permalink(42);出力例
https://example.com/sample-postget_post_permalink() に投稿IDを渡し、その投稿へのパーマリンクを取得します。get_permalink() との違いは、クエリ付きのリンクを含む投稿の場合に対応できる点です。
カスタムパラメータ付きURLの取得例
<?php
$url = add_query_arg('page', '2', get_post_permalink(42));
echo $url;出力例
https://example.com/sample-post?page=2add_query_arg() 関数を使い、ページ番号などのクエリパラメーターを追加したURLを生成します。get_post_permalink() を使うことで、クエリの追加が容易です。
一緒に使うことが多い関連タグ
get_permalink()
get_permalink() は、現在の投稿または指定したIDの投稿URLを取得するテンプレートタグです。通常のURL取得にはこちらが使われますが、クエリ対応が必要な場合は get_post_permalink() が適しています。
<?php
echo get_permalink(42);出力例
https://example.com/sample-postthe_permalink()
the_permalink() は、URLを直接画面に出力するためのテンプレートタグです。get_post_permalink() のように取得したURLをカスタマイズすることはできませんが、シンプルにリンクを表示したい場合に使われます。
<?php
the_permalink();get_post_permalink() と get_the_title() の組み合わせ
<?php
echo '<a href="' . get_post_permalink(42) . '">' . get_the_title(42) . '</a>';出力例
<a href="https://example.com/sample-post">Sample Post</a>get_post_permalink() で投稿のURLを取得し、get_the_title() でリンクテキストとして投稿タイトルを表示しています。
追加情報を取得したい場合
投稿URLにページネーションを追加する
<?php
echo get_post_permalink(42) . '?page=2';出力例
https://example.com/sample-post?page=2カスタム投稿タイプのURLを取得
<?php
echo get_post_permalink(123, 'custom_post_type');カスタム投稿タイプに対応したURLも取得でき、通常の投稿と同じように扱えます。
get_post() で取得できる投稿情報
<?php
$post = get_post(42);
echo $post->post_title;
echo $post->post_author;出力できる情報
- post_title:投稿のタイトル
- post_author:投稿者ID
- post_date:公開日
- post_content:投稿本文
想定されるトラブル
投稿が存在しない場合にURLが取得できない
指定したIDの投稿が存在しないと、get_post_permalink() は何も返しません。
解決策
投稿の存在を確認してからURLを取得するようにします。
<?php
if (get_post_status(42)) {
echo get_post_permalink(42);
} else {
echo '投稿が見つかりません。';
}URLの末尾にスラッシュがない
サーバーのパーマリンク設定が正しくないと、URLの末尾にスラッシュが付かない場合があります。
解決策
user_trailingslashit() を使って、URL末尾にスラッシュを追加します。
<?php
$url = user_trailingslashit(get_post_permalink(42));
echo $url;Q&A
まとめ
get_post_permalink() は、投稿IDを指定してURLを取得する強力なテンプレートタグです。
get_permalink() よりもクエリ文字列やページネーションなど、より複雑なURLの取得に適している点が特徴です。the_permalink() や get_the_title() と組み合わせることで、ユーザーにとってわかりやすいリンクを作成することができます。
パーマリンクに関するトラブルも解決策を知っていれば簡単に対応できますので、複雑なリンク管理が必要な場合にはぜひ活用してください。
コメント