यदि पेज टेम्प्लेट में छवि आकार जोड़ें


13

मैं वर्डप्रेस मल्टीसाइट के साथ एक सदस्य वेबसाइट बना रहा हूं। क्या यह प्रतिबंधित करना संभव है कि चयनित टेम्पलेट के आधार पर कितनी छवियां उत्पन्न हो रही हैं?

मैंने गैलरी टेम्पलेट पर कुछ चित्र बनाने के लिए कोड की निम्नलिखित पंक्तियों की कोशिश की है:

// Generate on all uploads
add_theme_support('post-thumbnails');
set_post_thumbnail_size( 1440, 350, true ); 
add_image_size( 'standard_box', 450, 215, true );
add_image_size( 'default_image', 691, 9999 );

// Generate on gallery template only
if ( is_page_template('page-gallery.php') ) {
add_image_size( 'gallery', 900, 9999 );
add_image_size( 'gallery_thumb', 450, 450, true );
}

यह काम नहीं किया है। मैंने कुछ शोध किया है और इस विषय पर कुछ भी पता नहीं लग सकता है। यदि आप मुझे सही दिशा में इंगित कर सकते हैं, तो मैं वास्तव में इसकी सराहना करूंगा।


1
इसमें ओटो का डायनेमिक इमेज रेसिज़र भी है जो आपको जितनी चाहें उतनी छवि आकार परिभाषित करने देता है, लेकिन केवल एक विशेष आकार में एक छवि उत्पन्न करता है जब इसकी आवश्यकता होती है। तो आपके उदाहरण के लिए गैलरी थंबनेल केवल पेज-गैलरी.php टेम्पलेट पर दिखाई देने वाली छवियों के लिए उत्पन्न होगी।
हेलगेटहाइकिंग

2
@ कैसर: बस अन्य दो महान विकल्पों उल्लेख करना चाहते हैं गतिशील छवि आकार और फोटोन सेवा जेटपैक में।
बीरगाइ

जवाबों:


13

यह हमेशा मेरे लिए एक बगबेर रहा है - ऑन-डिमांड इमेज साइज़िंग की कमी, और बाद की फ़ाइलों की संख्या यदि आपके पास बहुत सारे आकार हैं, तो आप समाप्त कर सकते हैं!

मैं आपके प्रयासों के पीछे के तर्क को देख सकता हूं - मुसीबत 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कॉल को ऑन-डिमांड आकार बदलने में बदल देगा , इसलिए इस स्थान को देखें!


इतना बढ़िया जवाब छोड़ने के लिए समय निकालने के लिए धन्यवाद। मैं निश्चित रूप से यह एक जाना होगा। यह महत्वपूर्ण है कि अपने सर्वर को कई उपयोगकर्ताओं के लिए खोलने से पहले मुझे यह अधिकार मिल जाए। अगर मुझे कोई और प्रश्न करना हो तो मैं आपको एक चिल्लाहट दूंगा।
सैम

2
मैंने इसे the_post_thumbnail () के साथ दिया; और यह पूरी तरह से काम करता है। एक समस्या: जब मैं छवि को हटाता हूं, तो यह उस स्क्रिप्ट को पीछे छोड़ देता है जिसे आपकी स्क्रिप्ट द्वारा फिर से आकार दिया गया है। कोई विचार?
सैम

5


अस्वीकरण:
- यह नहीं है वास्तव में एक जवाब।
- इस विषय पर अपने अतिरिक्त शोध के साथ आपकी मदद करने का इरादा है।
- इसके अलावा यह एक को प्रतिबिंबित कर रहा है - कम से कम महसूस किया - समान समस्याओं के बारे में इसी तरह के सवालों की हाल ही में लगातार घटना।


Wordpress Development पर इस विषय से संबंधित अतिरिक्त जानकारी:

नोट: सूची किसी भी तरह से आदेशित और व्यापक नहीं है।


3

यदि आप मक्खी पर अंगूठे बनाना चाहते हैं, तो आप एक्वा इमेज रिसाइज़र का उपयोग कर सकते हैं , लेकिन इस मिनी स्क्रिप्ट की एक खामी है। बनाए गए अंगूठे लाइब्रेरी से छवि हटाने पर नहीं हटेंगे। लेकिन यह एक बड़ी बात नहीं है। यदि आवश्यक हो तो आप SHH कमांड के माध्यम से ऐसा कर सकते हैं


1
फ़ाइलों के नष्ट होने के बारे में अच्छी बात। मेरा समाधान इससे ग्रस्त नहीं होगा! (अद्यतन उत्तर देखें)।
TheDeadMedic

1

यह आपकी समस्या का सीधा जवाब नहीं है। लेकिन मैं आपकी जरूरत के हिसाब से इमेज बनाने में आपकी मदद करूंगा।

जब आप add_image_size का उपयोग करते हैं तो यह मौजूदा छवियों का आकार नहीं बदलता है। यह केवल आपके add_image_size फ़ंक्शन को जोड़ने के बाद अपलोड की जाने वाली नई छवियों के लिए काम करता है।

तो आपका कोड is_page_template फ़ंक्शन के लिए नई छवियां उत्पन्न नहीं करेगा।

लेकिन आप अपनी समस्या को हल करने के लिए एक साधारण php वर्ग का उपयोग कर सकते हैं .... यह एक प्रसिद्ध php वर्ग है जिसका उपयोग वर्डप्रेस के लिए बहुत सारे प्रीमियम विषय के लिए किया जा रहा है। इसे एक्वा-रिसाइज़र कहा जाता है।

आप और अधिक विवरण यहां पा सकते हैं https://github.com/syamilmj/Aqua-Resizer Wiki: https://github.com/syamilmj/Aqua-Resizer/wiki

समस्या जो उत्पन्न हो सकती है:

यह फ़ंक्शन इस तरह काम करता है ...।

<?php aq_resize( $url, $width, $height, $crop, $single ) ?>

इसलिए जब यह फसल नहीं कर सकता (छोटी छवि के लिए जो आपकी ऊंचाई या चौड़ाई को परिभाषित करता है) तो यह कुछ भी नहीं दिखाता है। आप इस स्थिति पर काबू पा सकते हैं कि क्या इस फ़ंक्शन के भीतर url पास करने के बाद आपके पास एक शून्य मान प्राप्त हो रहा है या नहीं।

<?php 
$thumb = wp_get_attachment_url( get_post_thumbnail_id($post->ID), 'full' ); if($thumb){ $url = aq_resize( $thumb, 400, 200, true, true ); if(!$url){ $url = WPM_DIR.'/assets/images/demo/wrong_image_size.jpg'; } }else{ $url = WPM_DIR.'/assets/images/demo/400x200_no_feature_image.jpg'; } 
?>

इस तरह आप यह सुनिश्चित कर सकते हैं कि विशिष्ट पेज टेम्पलेट के लिए विशिष्ट छवि उत्पन्न होगी और इस तरह आपकी वेबसाइट बहुत अधिक क्लीनर होगी।

पुनश्च: यह php क्लास वर्डप्रेस कोर क्रॉपिंग सिस्टम का उपयोग करता है, इसलिए सुरक्षा के मुद्दे नहीं है।

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.