attachment_url_to_postid return false

La fonction my_attachment_url_to_postid() retourne l’id d’un attachment à partir de son url.

Lors d’un upload d’une image de très grande qualité, WordPress génère un autre format de cette image. Cette image est encore très grande mais reste raisonnable. Le suffixe “-scaled” est ajouté au nom de l’image.

Ex : monimage.jpg => monimage-scaled.jpg

Pour ce genre d’image, la fonction attachment_url_to_postid() ne fonctionne pas et retourne 0. En effet, le nom original n’est pas le bon.

Dans ce cas, plutôt que d’utiliser la fonction native de WordPress, il est préférable de récupérer l’id de l’attachment via la fonction suivante :

function my_attachment_url_to_postid($image_url) {
    $image_url = str_replace('-scaled.', '.', $image_url);
    global $wpdb;
    $attachment = $wpdb->get_col($wpdb->prepare("SELECT ID FROM $wpdb->posts WHERE guid='%s';", $image_url )); 
    if(isset($attachment[0]))
        return $attachment[0]; 
    return false;
}