Bu benim için her zaman bir böcek oldu - isteğe bağlı görüntü boyutunun olmaması ve çok sayıda boyutunuz varsa sonuçta ortaya çıkabilecek dosya sayısı!
Çabalarınızın arkasındaki mantığı görebiliyorum - sorun şu ki, add_image_size
sadece yükleme noktasında gerçekten devreye giriyor. Gibi, is_page_template(..)
her zaman olacak false
.
Hızlı bir google , bu sorunu çözmek için tasarlanmış bir betik olan Aqua Resizer'ı kazdı . Kullanmak yerine add_image_size
, aq_resize
doğrudan temanızda kullanırsınız ve görüntü için bir boyut yoksa, anında oluşturulur ve önbelleğe alınır.
Aslında, birçok görüntü boyutuna sahip birkaç sitede benzer, farklı da olsa bir teknik kullandım. Yüklenen her resim için her boyutu üreten WordPress yükünü yine de kaydedersiniz - istendiğinde ve istendiğinde anında (& önbellekte) oluşturulurlar. Farklı olduğu yerde, WP'nin tüm standart görüntü işlevlerini ve şablon etiketlerini normalde kullandığınız gibi kullanabilirsiniz!
Ayrıca, @Waqas'ın da belirttiği gibi, Aqua Resizer kullanmak medya kütüphanenizden bir görüntü sildiğinizde artık dosyaları bırakacaktır. Benim tekniği ile, tüm bunlar veritabanına kaydedilir ve WordPress tarafından tanınan konum beri dosyalar silinir.
/**
* Resize internally-registered image sizes on-demand.
*
* @link http://wordpress.stackexchange.com/q/139624/1685
*
* @param mixed $null
* @param int $id
* @param mixed $size
* @return mixed
*/
function wpse_139624_image_downsize( $null, $id, $size ) {
static $sizes = array(
'post-thumbnail' => array(
'height' => 350,
'width' => 1440,
'crop' => true,
),
'standard_box' => array(
'height' => 215,
'width' => 450,
'crop' => true,
),
'default_image' => array(
'height' => 9999,
'width' => 691,
'crop' => false,
),
'gallery' => array(
'height' => 900,
'width' => 9999,
'crop' => false,
),
'gallery_thumb' => array(
'height' => 450,
'width' => 450,
'crop' => true,
),
);
if ( ! is_string( $size ) || ! isset( $sizes[ $size ] ) )
return $null;
if ( ! is_array( $data = wp_get_attachment_metadata( $id ) ) )
return $null;
if ( ! empty( $data['sizes'][ $size ] ) )
return $null;
if ( $data['height'] <= $sizes[ $size ]['height'] && $data['width'] <= $sizes[ $size ]['width'] )
return $null;
if ( ! $file = get_attached_file( $id ) )
return $null;
$editor = wp_get_image_editor( $file );
if ( ! is_wp_error( $editor ) ) {
$data['sizes'] += $editor->multi_resize(
array(
$size => $sizes[ $size ],
)
);
wp_update_attachment_metadata( $id, $data );
}
return $null;
}
add_filter( 'image_downsize', 'wpse_139624_image_downsize', 10, 3 );
Ve pratikte:
wp_get_attachment_image( $id, 'gallery' ); // Resized if not already
wp_get_attachment_image_src( $id, 'standard_box' ); // Resized if not already
the_post_thumbnail(); // You get the idea!
// And so forth!
Bunu otomatik olarak tüm add_image_size
çağrıları isteğe bağlı yeniden boyutlandırmaya dönüştürecek bir eklentiye dönüştürmeyi planlıyorum , bu yüzden bu alanı izleyin!