
get_attachment_link()とは?
get_attachment_link() は、
メディアライブラリに登録された添付ファイルの「添付ファイルページ」のURLを取得する関数
です。
ここでいう「添付ファイルページ」とは、画像・PDF・動画などの単独ページのことを指します。
たとえば、画像をアップロードすると
- 画像ファイル自体のURL(例:
/wp-content/uploads/...) - 添付ファイルページURL(例:
/sample-image/)
の2つのURLが生成されます。
get_attachment_link() は後者の添付ファイルページのURLを取得します。
get_attachment_link()の基本的な書式
get_attachment_link( int|WP_Post $attachment = 0, bool $leavename = false )get_attachment_link()の引数
| 引数 | 型 | 説明 |
|---|---|---|
$attachment | int / WP_Post | 添付ファイルのIDまたはWP_Postオブジェクト(メディアID) |
$leavename | bool | true にすると %postname% のプレースホルダを残す |
get_attachment_link()の戻り値
文字列(URL)
添付ファイルページとは?
添付ファイルページは、テーマ内で attachment.php テンプレートを使って表示されます。
例:
https://example.com/sample-image/このページには以下が表示されます。
- メディアの大きなプレビュー
- キャプションや説明
- コメント欄(有効な場合)
get_attachment_link()の基本的な使い方
添付ファイルIDからURLを取得
$attachment_id = 123;
$url = get_attachment_link($attachment_id);WP_Postオブジェクトを指定
$attachment = get_post(123);
$url = get_attachment_link($attachment);HTMLにリンクを出力
<a href="<?php echo esc_url(get_attachment_link($attachment_id)); ?>">
この画像の詳細ページ
</a>メディアファイルURLとの違い
とても重要なので整理します。
| 関数 | 内容 |
|---|---|
wp_get_attachment_url() | 実ファイルのURL(画像/PDFなど) |
get_attachment_link() | 添付ファイルページのURL |
例
wp_get_attachment_url()
https://example.com/wp-content/uploads/2023/10/sample.jpgget_attachment_link()
https://example.com/sample-image/$leavenameの使い方
$leavename = true にするとURLに %postname% を残したまま返ります。
例:
$url = get_attachment_link(123, true);結果:
https://example.com/%postname%/これは主に管理画面やスラッグ置換処理で使用します。
添付ファイルページを使うケース
- 画像をクリックしたときに添付ファイルページに遷移させたい
- ギャラリーの各画像に詳細ページを用意したい
- メディアごとのコメントを受け付ける
ギャラリーで使う例
たとえばgalleryショートコードでリンク先を「attachment page」にすると、自動でget_attachment_link()が使われます。
[gallery link="attachment"]
カスタマイズ例
画像リンクを添付ファイルページにする
<?php
$attachment_id = 123;
?>
<a href="<?php echo esc_url(get_attachment_link($attachment_id)); ?>">
<?php echo wp_get_attachment_image($attachment_id, 'medium'); ?>
</a>サムネイル付き一覧
<?php
$args = array(
'post_type' => 'attachment',
'post_mime_type' => 'image',
'numberposts' => -1,
);
$attachments = get_posts($args);
if ($attachments) {
foreach ($attachments as $attachment) {
$link = get_attachment_link($attachment->ID);
echo '<div class="attachment">';
echo '<a href="' . esc_url($link) . '">';
echo wp_get_attachment_image($attachment->ID, 'thumbnail');
echo '</a>';
echo '</div>';
}
}
?>フィルターフック
get_attachment_link()ではattachment_linkフィルターが適用されます。
例:URLに?ref=mediaを追加
add_filter('attachment_link', 'add_ref_to_attachment_link', 10, 2);
function add_ref_to_attachment_link($link, $post_id) {
return $link . '?ref=media';
}カスタムURLに置換する場合
attachment_linkフィルターを使うと、URLを完全に差し替えることも可能です。
get_attachment_link()のよくある質問
- 添付ファイルページは必要?
-
必須ではありませんが、テーマやSEOの目的で使う場合があります。必要ない場合は直接ファイルURLへリンクする方が簡単です。
- 投稿や固定ページに使える?
-
使えません。これはメディア専用です。
- 添付ファイルページを無効化できる?
-
functions.phpで
wp_redirect()を使って直接ファイルURLにリダイレクトする方法があります。
メディアファイル直リンクにする方法
ファイルURLだけ欲しい場合は wp_get_attachment_url() を使います。
例:
$file_url = wp_get_attachment_url($attachment_id);実用例:添付ファイルページか直リンクを条件で切り替え
$attachment_id = 123;
if (get_option('use_attachment_page')) {
$url = get_attachment_link($attachment_id);
} else {
$url = wp_get_attachment_url($attachment_id);
}セキュリティのポイント
esc_url()で必ずエスケープ- URLをHTML属性に埋め込む場合はサニタイズ必須
まとめ
get_attachment_link()は添付ファイルページのURLを取得する関数- 実ファイルURLとは別もの
- ギャラリーやメディアライブラリに便利
- フィルターでURL加工が可能
- テーマによって添付ファイルページが使われないケースもある
活用のポイント
- 画像ギャラリーや詳細ページに最適
- 投稿や固定ページでは使わない
- ファイルURLが必要なら
wp_get_attachment_url()を使う