주문형 이미지 크기가 부족하고 크기가 많은 경우 파일 수를 줄일 수 있습니다.
나는 당신의 노력의 배후에있는 논리를 볼 수 있습니다. 문제는 add_image_size
단지 업로드 시점에서만 작용합니다. 따라서 is_page_template(..)
항상입니다 false
.
빠른 구글 은이 문제를 해결하기 위해 설계된 스크립트 인 Aqua Resizer를 파헤 쳤습니다 . 을 사용하는 대신 테마에서 직접 add_image_size
사용 aq_resize
하고 이미지의 크기가 존재하지 않으면 이미지를 즉시 생성하여 캐시합니다.
실제로 나는 많은 이미지 크기를 가진 여러 사이트에서 비슷하지만 다른 기술을 사용했습니다. 업로드 된 모든 이미지에 대해 모든 크기를 생성하는 WordPress의 오버 헤드를 여전히 저장합니다. 이미지는 요청에 따라 즉시 생성 (및 캐시)됩니다. 다른 점은 평소처럼 WP의 표준 이미지 기능과 템플릿 태그를 모두 사용할 수 있다는 것입니다!
또한 @Waq에서 언급했듯이 Aqua Resizer를 사용하면 미디어 라이브러리에서 이미지를 삭제할 때 고아 파일이 남습니다. 내 기술을 사용하면 모든 파일이 데이터베이스에 저장되고 WordPress에서 인식되기 때문에 모든 파일이 삭제됩니다.
/**
* 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 );
그리고 실제로 :
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!
나는 모든 add_image_size
호출을 주문형 크기 조정 으로 자동 변환하는 플러그인으로 바꾸려고합니다. 그래서이 공간을보십시오!