The attachment_link WordPress PHP filter modifies the permalink for an attachment.
Usage
add_filter('attachment_link', 'your_custom_function', 10, 2); function your_custom_function($link, $post_id) { // Your custom code here return $link; }
Parameters
$link
(string) – The attachment’s permalink.$post_id
(int) – Attachment ID.
More information
See WordPress Developer Resources: attachment_link
Examples
Add custom query parameter to attachment link
Add a custom query parameter source
with value gallery
to the attachment link.
add_filter('attachment_link', 'add_custom_query_parameter', 10, 2); function add_custom_query_parameter($link, $post_id) { // Add custom query parameter to the attachment link $link = add_query_arg('source', 'gallery', $link); return $link; }
Append attachment ID to the permalink
Append the attachment ID to the permalink with a hyphen.
add_filter('attachment_link', 'append_attachment_id', 10, 2); function append_attachment_id($link, $post_id) { // Append attachment ID to the link $link = trailingslashit($link) . $post_id; return $link; }
Replace default attachment permalink with custom permalink structure
Replace the default attachment permalink with a custom structure: site_url/media/attachment-slug/
add_filter('attachment_link', 'custom_attachment_permalink', 10, 2); function custom_attachment_permalink($link, $post_id) { $post = get_post($post_id); $custom_link = home_url('/media/' . $post->post_name . '/'); return $custom_link; }
Modify attachment link based on attachment type
Modify the attachment link based on the attachment's file type (e.g., image or video).
add_filter('attachment_link', 'modify_link_based_on_type', 10, 2); function modify_link_based_on_type($link, $post_id) { // Get attachment file type $type = wp_check_filetype(get_attached_file($post_id)); // Modify link for images if ($type['type'] === 'image/jpeg' || $type['type'] === 'image/png') { $link = add_query_arg('type', 'image', $link); } // Modify link for videos elseif ($type['type'] === 'video/mp4') { $link = add_query_arg('type', 'video', $link); } return $link; }
Redirect attachment link to post parent
Redirect the attachment link to its parent post.
add_filter('attachment_link', 'redirect_to_parent_post', 10, 2); function redirect_to_parent_post($link, $post_id) { // Get parent post of the attachment $parent_post = wp_get_post_parent_id($post_id); if ($parent_post) { // Redirect attachment link to parent post $link = get_permalink($parent_post); } return $link; }