এটি সর্বদা আমার জন্য বাগবियर হয়ে দাঁড়িয়েছে - অন-ডিমান্ড ইমেজ সাইজিংয়ের অভাব এবং এরপরে থাকা ফাইলগুলির সংখ্যার পরিমাণ যদি আপনি প্রচুর আকারের হয়ে থাকেন তবে শেষ করতে পারেন!
আমি আপনার প্রচেষ্টার পিছনে যুক্তি দেখতে পাচ্ছি - সমস্যাটি হচ্ছে, add_image_size
পয়েন্ট-অফ-আপলোডে কেবল সত্যই কার্যকর হয়। যেমন, is_page_template(..)
সর্বদা থাকবে false
।
একটি দ্রুত গুগল এই সমস্যাটি মোকাবেলার জন্য ডিজাইন করা স্ক্রিপ্ট অ্যাকোয়া রেজাইজার খনন করেছে। ব্যবহারের পরিবর্তে add_image_size
, আপনি aq_resize
সরাসরি আপনার থিমটিতে ব্যবহার করেন এবং যদি চিত্রটির জন্য কোনও আকারের অস্তিত্ব না থাকে, তবে এটি তৈরি এবং অন ফ্লাইটে ক্যাশেড।
প্রকৃতপক্ষে আমি অনেকগুলি চিত্রের আকার সহ বেশ কয়েকটি সাইটে একটি ভিন্ন, কৌশল ব্যবহার করি। আপনি এখনও আপলোড হওয়া প্রতিটি চিত্রের জন্য প্রতিটি আকার তৈরি করে ওয়ার্ডপ্রেসের ওভারহেড সংরক্ষণ করুন - তাদের অনুরোধ করা হয় এবং সেগুলি অন-দ্য ফ্লাই (& ক্যাশেড) তৈরি করা হয়। যেখানে এটির ভিন্নতা রয়েছে, তা হ'ল আপনি সাধারণত WP এর সমস্ত স্ট্যান্ডার্ড ইমেজ ফাংশন এবং টেম্পলেট ট্যাগগুলি ব্যবহার করতে পারেন!
এছাড়াও, যেমন @ ওয়াকাস উল্লেখ করেছেন, আপনি যখন আপনার মিডিয়া লাইব্রেরি থেকে কোনও চিত্র মুছবেন তখন অ্যাকোয়া রেজাইজার ব্যবহার করে এতিম ফাইলগুলি ছেড়ে যাবে। আমার প্রযুক্তির সাহায্যে সমস্ত ফাইল মুছে ফেলা হবে, যেহেতু সেগুলি ডেটাবেসে সংরক্ষণ করা হয়েছে এবং ওয়ার্ডপ্রেস দ্বারা স্বীকৃত।
/**
* 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
কলকে স্বয়ংক্রিয়ভাবে অন-চাহিদা পুনরায় আকারে রূপান্তরিত করে, তাই এই স্থানটি দেখুন!