get_attachment_link()

get_attachment_link()
目次

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()の引数

引数説明
$attachmentint / WP_Post添付ファイルのIDまたはWP_Postオブジェクト(メディアID)
$leavenamebooltrue にすると %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() を使う
よかったらシェアしてね!
  • URLをコピーしました!
  • URLをコピーしました!

この記事を書いた人

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

目次