私は自分のサイトを最適化することに取り組んでいます、そしてその一部はイメージを圧縮して、より小さなバージョンを使うことです。私は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
)
画像がある程度のサイズで存在する場合、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を破壊しないで、代わりにそれを使って作業することをお勧めします。