I have the URL of an image which I know is an attachment. Now, I need to find out the attachment ID.

This is what I've got (thanks to PippinsPlugins):

// retrieves the attachment ID from the file URL
function pippin_get_image_id($image_url) {
    global $wpdb;
    $attachment = $wpdb->get_col($wpdb->prepare("SELECT ID FROM $wpdb->posts WHERE guid='%s';", $image_url )); 
        return $attachment[0]; 

This works fine for an URL like this: http://example.com/wp-content/uploads/2015/03/picture.png

My problem is, the URL is the URL of a cropped picture, so it is http://example.com/wp-content/uploads/2015/03/picture-300x297.png

My next problem is right now, I can't simply explode the URL to remove 300x297, since I might have pictures, which are not cropped but might have a file name like 'picture2-dontexplodeme.png'

Basically, I need a fool proof solution haha. If there is anyone out there, who has an easy solution, I would be very happy :)

  • 1
    Is doing it from the CSS (easiest client side with jQuery) an option? e.g. images that have been inserted into posts with the Add Media button will typically have a class like wp-image-123, indicating the attachment ID. If the images are inserted automatically elsewhere in the theme, could you add a CSS class or a data attribute containing the ID? Apr 13, 2015 at 17:49
  • @ialocin yes, I would call it a duplicate. Perfect solution, from there I can go on. thanks Apr 13, 2015 at 17:51
  • My pleasure. I just remembered there is a good answer to a similar question already. Thats why we still need humans, because the system isn't smart enough - yet :) Apr 13, 2015 at 17:54
  • 1
    You can use core function attachment_url_to_postid()
    – JakeParis
    Sep 13, 2022 at 18:13

1 Answer 1

function get_attachment_id_from_src ($image_src) {

    global $wpdb;
    $query = "SELECT ID FROM {$wpdb->posts} WHERE guid='$image_src'";
    $id = $wpdb->get_var($query);
    return $id;

  • Is something like this useful?
    – a4jp.com
    Apr 13, 2015 at 17:22
  • 1
    Hi, thanks for your answer. But this doesn't apply on cropped images like example.com/wp-content/uploads/2015/03/picture-300x297.png since their URL are not stored like this in the database. Apr 13, 2015 at 17:29
  • Can you post a link to the real website?
    – a4jp.com
    Apr 13, 2015 at 17:36
  • You could also just hardcode the image into your page. If you can show me what you are trying to do I might be able to help a bit more.
    – a4jp.com
    Apr 13, 2015 at 17:49
  • 1
    Thank you and glad you could find an answer ^^ Could you post the code you are using? I'd like to see what you are doing just out of interest. I much around with WordPress every day but it's always nice seeing different ways to solve different problems.
    – a4jp.com
    Apr 13, 2015 at 18:48

Not the answer you're looking for? Browse other questions tagged or ask your own question.