WordPress Version: 6.2
/**
* Retrieves an attachment page link using an image or icon, if possible.
*
* @since 2.5.0
* @since 4.4.0 The `$post` parameter can now accept either a post ID or `WP_Post` object.
*
* @param int|WP_Post $post Optional. Post ID or post object.
* @param string|int[] $size Optional. Image size. Accepts any registered image size name, or an array
* of width and height values in pixels (in that order). Default 'thumbnail'.
* @param bool $permalink Optional. Whether to add permalink to image. Default false.
* @param bool $icon Optional. Whether the attachment is an icon. Default false.
* @param string|false $text Optional. Link text to use. Activated by passing a string, false otherwise.
* Default false.
* @param array|string $attr Optional. Array or string of attributes. Default empty.
* @return string HTML content.
*/
function wp_get_attachment_link($post = 0, $size = 'thumbnail', $permalink = false, $icon = false, $text = false, $attr = '')
{
$_post = get_post($post);
if (empty($_post) || 'attachment' !== $_post->post_type || !wp_get_attachment_url($_post->ID)) {
return __('Missing Attachment');
}
$url = wp_get_attachment_url($_post->ID);
if ($permalink) {
$url = get_attachment_link($_post->ID);
}
if ($text) {
$link_text = $text;
} elseif ($size && 'none' !== $size) {
$link_text = wp_get_attachment_image($_post->ID, $size, $icon, $attr);
} else {
$link_text = '';
}
if ('' === trim($link_text)) {
$link_text = $_post->post_title;
}
if ('' === trim($link_text)) {
$link_text = esc_html(pathinfo(get_attached_file($_post->ID), PATHINFO_FILENAME));
}
/**
* Filters the list of attachment link attributes.
*
* @since 6.2.0
*
* @param array $attributes An array of attributes for the link markup,
* keyed on the attribute name.
* @param int $id Post ID.
*/
$attributes = apply_filters('wp_get_attachment_link_attributes', array('href' => $url), $_post->ID);
$link_attributes = '';
foreach ($attributes as $name => $value) {
$value = ('href' === $name) ? esc_url($value) : esc_attr($value);
$link_attributes .= ' ' . esc_attr($name) . "='" . $value . "'";
}
$link_html = "<a{$link_attributes}>{$link_text}</a>";
/**
* Filters a retrieved attachment page link.
*
* @since 2.7.0
* @since 5.1.0 Added the `$attr` parameter.
*
* @param string $link_html The page link HTML output.
* @param int|WP_Post $post Post ID or object. Can be 0 for the current global post.
* @param string|int[] $size Requested image size. Can be any registered image size name, or
* an array of width and height values in pixels (in that order).
* @param bool $permalink Whether to add permalink to image. Default false.
* @param bool $icon Whether to include an icon.
* @param string|false $text If string, will be link text.
* @param array|string $attr Array or string of attributes.
*/
return apply_filters('wp_get_attachment_link', $link_html, $post, $size, $permalink, $icon, $text, $attr);
}