これは私にとって常にバグベアでした-オンデマンドの画像サイズ変更の欠如、そしてあなたがたくさんのサイズを持っているなら、あなたが最終的にファイルの数を増やすことができます!
私はあなたの努力の背後にある論理を見ることができます-問題は、add_image_size
アップロードの時点でのみ真に作用するようになることです。そのため、is_page_template(..)
常にになりますfalse
。
この問題に取り組むために設計されたスクリプトである、簡単なGoogleがAqua Resizerを掘り出しました。むしろ使用よりもadd_image_size
、あなたが使用aq_resize
あなたのテーマに直接、画像のためのサイズが存在しない場合、それは、オンザフライで作成され、キャッシュされています。
実際、多くの画像サイズを持ついくつかのサイトで、異なるとはいえ、同様の手法を使用しました。アップロードされたすべての画像のすべてのサイズを生成するWordPressのオーバーヘッドを節約できます。要求されたとおりにオンザフライで生成(およびキャッシュ)されます。異なる点は、WPの標準の画像関数とテンプレートタグをすべて通常どおり使用できることです!
また、@ Waqasが述べたように、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
呼び出しをオンデマンドのサイズ変更に自動的に変換するプラグインに変えるつもりですので、このスペースを見てください!