web-dev-qa-db-fra.com

Taille des images et ordre des opérations

Je travaille sur l'optimisation de mon site, notamment en compressant les images et en utilisant des versions plus petites. J'utilise WP Smush et crée un tas de tailles pour chaque image. Toutes les images ont été effacées.

Mon modèle est plutôt personnalisé et je n'utilise pas le WYSIWYG normal à quelques endroits. Dans ces situations, j’ai écrit deux fonctions pour extraire des tailles d’image plus petites au besoin:

(remarque: la première fonction provient de https://wordpress.org/support/topic/need-to-get-attachment-id-by-image-url )

function get_image_id_by_link($link){
    global $wpdb;

    $link = preg_replace('/-\d+x\d+(?=\.(jpg|jpeg|png|gif)$)/i', '', $link);

    return $wpdb->get_var("SELECT ID FROM {$wpdb->posts} WHERE BINARY guid='$link'");
}

function get_image_url($url, $preferred_size = 900){
    $id = get_image_id_by_link($url);

    if(wp_get_attachment_image_src($id, array($preferred_size, $preferred_size))) {
        return wp_get_attachment_image_src($id, array($preferred_size,$preferred_size))[0];
    }
    else if(wp_get_attachment_image_src($id, array(900,900))) {

        return wp_get_attachment_image_src($id, array(900,900))[0];
    } 
    else if(wp_get_attachment_image_src($id, 'medium_large')){
        return wp_get_attachment_image_src($id, 'medium_large')[0];
    } 
    else if (wp_get_attachment_image_src($id, 'large')){
        return wp_get_attachment_image_src($id, 'large')[0];
    } 
    else {
        return $url;
    }
}

Cette fonction fonctionne pour toutes les images que je télécharge et utilise maintenant. Mais, toutes les images téléchargées avant que je pousse cette fonction tirent toujours l'URL de l'image en taille réelle. J'ai confirmé que ces images (les plus anciennes) ont des tailles plus petites.

Bien que je puisse télécharger à nouveau toutes les images, je suis curieux de savoir pourquoi cela se produit et comment je peux le réparer.

Merci!


Modifier

Voici les tailles enregistrées, en fonction de get_intermediate_image_sizes():

Array
(
    [0] => thumbnail
    [1] => medium
    [2] => medium_large
    [3] => large
    [4] => medium-box
    [5] => large-box
    [6] => responsive-100
    [7] => responsive-150
    [8] => responsive-200
    [9] => responsive-300
    [10] => responsive-450
    [11] => responsive-600
    [12] => responsive-900
)
2
hookedonwinter

wp_get_attachment_image_src retournera toujours une URL vers un fichier si l'image existe dans une certaine taille. Si la taille demandée n'existe pas, vous obtenez l'URL de l'image en taille réelle telle que téléchargée. (Ce n'est pas la "grande" taille d'image.)

Ainsi, pour un ID d'image valide, votre if(wp_get_attachment_image_src($id, array($preferred_size, $preferred_size))) conditionnel réussira toujours, car wp_get_attachment_image_src renvoie toujours une URL, même si cette URL n'est pas celle que vous attendez.

Pour résoudre ce problème, je vous recommande de ne pas renverser l'API et de l'utiliser avec elle.

2