Retrieving a custom link on an attachment

I wanted to link images in a gallery to a custom URL.

I know I could add an extra field and do it this way

I found this ticket on Trac, though, that modifies the “Link URL” field to accept custom links. I like how that works and I’d like to make that work.

Trouble is, I can’t seem to figure out how to access the data. I’m using get_children to create an array to loop through. The Link URL is not included in the results.

I’ve tried get_attachment_link – the trouble is, it doesn’t just pull it from the field, the function generates the link itself.

Any ideas? Thanks!

1 Answer
1

On the Trac ticket you’ve linked at the bottom there is a solution to make it work

function _save_attachment_url($post, $attachment) {
    if ( isset($attachment['url']) ) 
        update_post_meta( $post['ID'], '_wp_attachment_url', esc_url_raw($attachment['url']) ); 
    return $post;
}
add_filter('attachment_fields_to_save', '_save_attachment_url', 10, 2);

function _replace_attachment_url($form_fields, $post) {
    if ( isset($form_fields['url']['html']) ) {
        $url = get_post_meta( $post->ID, '_wp_attachment_url', true );
        if ( ! empty($url) )
            $form_fields['url']['html'] = preg_replace( "/value=".*?"https://wordpress.stackexchange.com/", "value="$url"", $form_fields['url']['html'] );
    }
    return $form_fields;
}
add_filter('attachment_fields_to_edit', '_replace_attachment_url', 10, 2);

So after this code you will be able to add your custom links in the “Link URL” field.

And to get it you just need the attachment ID and you can get it with:

get_post_meta( $post->ID, '_wp_attachment_url', true );

Leave a Comment