web-dev-qa-db-ja.com

画像サイズと操作順序

私は自分のサイトを最適化することに取り組んでいます、そしてその一部はイメージを圧縮して、より小さなバージョンを使うことです。私はWP Smushを使って、それぞれの画像にたくさんのサイズを作成しています。すべての画像は滑らかにされています。

私のテンプレートはかなりカスタムです、そして私はいくつかの場所で通常のWYSIWYGを使っていません。そのような状況で、私は必要に応じてより小さな画像サイズを引き出すために2つの関数を書きました:

(注:最初の機能は からです。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;
    }
}

この機能は、アップロードして現在使用しているすべての画像に対して機能します。ただし、この機能をプッシュする前にアップロードされた画像は、常にフルサイズの画像URLを取得します。私はそれらの画像(以前のもの)が小さいサイズを持っていることを確認しました。

私はすべての画像を再アップロードすることができますが、なぜこれが起こっているのか、そしてどうやってそれを修正できるのか興味があります。

ありがとうございます。


編集する

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は常にファイルへのURLを返します。あなたが求めるサイズが存在しない場合は、アップロードされたフルサイズ画像のURLを取得します。 (これは「大きな」画像サイズではありません。)

そのため、有効なイメージIDの場合、wp_get_attachment_image_srcは常にURLを返すので、その条件付きif(wp_get_attachment_image_src($id, array($preferred_size, $preferred_size)))は常に成功します。たとえそのURLが予期したものでなくても。

それを修正するために、私はあなたがAPIを破壊しないで、代わりにそれを使って作業することをお勧めします。

2