skip to Main Content

How to get the attachment_id by using the attachment URL?

I had a problem, where i needed the attachment ID for a customized autoset featured image function but I only knew the url of an image in the wordpress media library.

There is no built in function in wordpress to ccchieve this and there are not really many solutions out there. But I found one here and want spread it, so it might help others in similar situations. Credits go to Philip Newcomer for this awesome, easy and flexible function:

function pn_get_attachment_id_from_url( $attachment_url = '' ) {
global $wpdb;$attachment_id = false;
// If there is no url, return.if ( '' == $attachment_url )return;
// Get the upload directory paths$upload_dir_paths = wp_upload_dir();
// Make sure the upload path base directory exists in the attachment URL, to verify that we're working with a media library imageif ( false !== strpos( $attachment_url, $upload_dir_paths['baseurl'] ) ) {
// If this is the URL of an auto-generated thumbnail, get the URL of the original image$attachment_url = preg_replace( '/-\d+x\d+(?=\.(jpg|jpeg|png|gif)$)/i', '', $attachment_url );
// Remove the upload path base directory from the attachment URL$attachment_url = str_replace( $upload_dir_paths['baseurl'] . '/', '', $attachment_url );
// Finally, run a custom database query to get the attachment ID from the modified attachment URL$attachment_id = $wpdb->get_var( $wpdb->prepare( "SELECT wposts.ID FROM $wpdb->posts wposts, $wpdb->postmeta wpostmeta WHERE wposts.ID = wpostmeta.post_id AND wpostmeta.meta_key = '_wp_attached_file' AND wpostmeta.meta_value = '{e50821f0310554aaa5d51f3ac34d1fbfe12e6f6db33f25f0f0d794a51fa7fa54}s' AND wposts.post_type = 'attachment'", $attachment_url ) );
return $attachment_id;}

Back To Top