
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.jpg
get_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()
を使う