यह हमेशा मेरे लिए एक बगबेर रहा है - ऑन-डिमांड इमेज साइज़िंग की कमी, और बाद की फ़ाइलों की संख्या यदि आपके पास बहुत सारे आकार हैं, तो आप समाप्त कर सकते हैं!
मैं आपके प्रयासों के पीछे के तर्क को देख सकता हूं - मुसीबत add_image_size
केवल बिंदु-अपलोड पर वास्तव में आती है। जैसे, is_page_template(..)
हमेशा रहेगा false
।
एक त्वरित Google ने एक्वा रेसिज़र को खोदा , इस मुद्दे से निपटने के लिए डिज़ाइन की गई एक स्क्रिप्ट। उपयोग के बजाय add_image_size
, आप aq_resize
सीधे अपने विषय में उपयोग करते हैं, और यदि छवि के लिए कोई आकार मौजूद नहीं है, तो इसे बनाया जाता है और ऑन-द-फ्लाई को कैश किया जाता है।
वास्तव में मैंने एक समान का उपयोग किया है, यद्यपि विभिन्न, कई छवि आकारों वाली साइटों पर तकनीक। तुम अब भी बचाने वर्डप्रेस की भूमि के ऊपर पैदा हर के लिए आकार हर छवि अपलोड की गई - वे ऑन-द-मक्खी (और कैश की गई) के रूप में उत्पन्न कर रहे हैं और जब वे अनुरोध कर रहे हैं। जहां यह भिन्न होता है, यह है कि आप सामान्य रूप से WP के सभी मानक छवि फ़ंक्शन और टेम्पलेट टैग का उपयोग कर सकते हैं!
जैसा कि @Waqas ने उल्लेख किया है, एक्वा रेसिज़र का उपयोग करने पर आप अपने मीडिया लाइब्रेरी से एक छवि हटाते समय अनाथ फाइलें छोड़ देंगे। मेरी तकनीक के साथ, सभी फ़ाइलें हटा दी जाएंगी, क्योंकि वे डेटाबेस में सहेजे गए हैं और वर्डप्रेस द्वारा मान्यता प्राप्त हैं।
/**
* 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
कॉल को ऑन-डिमांड आकार बदलने में बदल देगा , इसलिए इस स्थान को देखें!