फीचर्ड इमेज के लिए न्यूनतम आयाम की आवश्यकता?


14

मैं कई लेखकों के साथ एक बेसबॉल वेबसाइट बना रहा हूं। पिछले अनुभव से, कोई फर्क नहीं पड़ता कि आप किसी को व्यक्तिगत रूप से कितना जानते हैं, इसका मतलब यह नहीं है कि वे आपके निर्देशों का पालन करेंगे या पढ़ेंगे।

कहा जा रहा है, मैं यह चाहूंगा कि कोई भी लेखक जो "चित्रित रूप में उपयोग की गई छवि" का निर्णय लेता है, न्यूनतम 640px चौड़ी और न्यूनतम 360px लंबी हो।

मुझे लगता है कि प्रत्येक पोस्ट में WyPiekacz प्लगइन का उपयोग करके एक विशेष रुप से प्रदर्शित चित्र है ; पोस्ट एक चित्रित छवि के बिना प्रकाशित नहीं होगा। मैंने एक मीडिया के लिए एक और साइट पर बैनटर्न के कोड का उपयोग करके Add Media में "From URL" टैब को हटाकर हॉटलिंक करने की क्षमता को अवरुद्ध कर दिया है ।

अब मुझे यह आवश्यक है कि किसी भी छवि का उपयोग किया गया चित्र 360px द्वारा कम से कम 640px है। मेरा कोई कोडर नहीं है, लेकिन मैं मॉर बाराज़नी के कोड को शुरुआती बिंदु के रूप में उपयोग करने की कोशिश कर रहा हूं, लेकिन कोई फायदा नहीं हुआ। उसका कोड अपलोड की गई किसी भी छवि के लिए न्यूनतम आयामों को बाध्य करता है


आपके प्रश्न का उत्तर नहीं दिया जा सकता, लेकिन मुझे कहना है कि आसान फिल्टर्स और फ़ंक्शंस के एक अच्छे संग्रह के लिए धन्यवाद;)
ओले हेनरिक स्कोगस्ट्रॉम


उन छवियों के बारे में जो पोस्टों से जुड़ी हैं, लेकिन पोस्ट फीचर्ड इमेज के रूप में उपयोग करने का इरादा नहीं है ? क्या यह पूरी तरह से असंभव है कि हर पोस्ट में केवल पोस्ट फीचर्ड इमेजेज ही जुड़ी होंगी ?
चिप बेनेट

नहीं, लेकिन हर पोस्ट में एक चित्रित छवि होना आवश्यक है। यह मुख्य कारण Maor Barazany के कोड को मजबूर करने के लिए (ऊपर लिंक) है। अपलोड करने पर आयाम काम नहीं करेंगे (या नीचे दिए गए कोड को नहीं)। वे कोड स्निपेट सभी अपलोड की गई छवियों को न्यूनतम आयामों के लिए मजबूर करते हैं। उपयोगकर्ता अपने पोस्ट में अतिरिक्त चित्र जोड़ सकते हैं, लेकिन "फीचर्ड इमेज" को स्ट्रेचिंग के बिना थीम को फिट करने के लिए पर्याप्त होना चाहिए। यह इसलिए भी है क्योंकि मुझे अपलोडर के "मीडिया लाइब्रेरी" टैब पर "छवि आयाम" कॉलम चाहिए। उपयोगकर्ता जल्दी से एक चित्रित छवि के लिए बड़ी छवि का चयन करने में सक्षम होंगे।
ट्रैविस Pflanz

मुझे लगता है कि आप चाहते हैं कि सभी पोस्ट में एक विशेष रूप से छवि हो। लेकिन उस होगा हमेशा होना ही पदों से जुड़ी छवि? या पदों हो सकता था में अन्य छवियों इसके अलावा करने के लिए विशेष रुप से प्रदर्शित छवि?
चिप बेनेट

जवाबों:


2

अच्छी तरह से अगर आप WyPiekacz प्लगइन का उपयोग कर रहे हैं; जैसा कि आपने बताया कि चित्रित छवि अपलोड की गई है, आप यह जाँचने के लिए इसे थोड़ा मोड़ सकते हैं कि यदि चित्रित छवि है तो यह न्यूनतम dimesions का है जैसा कि आपको आवश्यक है।

$has_thumbnail = false;
            if ( ( $post_id > 0 ) && function_exists( 'has_post_thumbnail' ) ) {
                $has_thumbnail = has_post_thumbnail( $post_id );
            }

            $has_thumbnail = apply_filters( 'wypiekacz_check_thumbnail', $has_thumbnail, $post_id, $post_data );

            if ( !$has_thumbnail ) {
                $this->errors[] = array( 'post_thumbnail', __('Post thumbnail (Featured image) is required.', 'wypiekacz') );
            }

आप ऊपर कोड को wypiekacz.php में बदल सकते हैं:

$has_thumbnail_proper_dimension = false;
        if ( ( $post_id > 0 ) && function_exists( 'has_post_thumbnail' ) ) {
            $has_thumbnail = has_post_thumbnail( $post_id );
              list($url, $width, $height) = wp_get_attachment_image_src(get_post_thumbnail_id( $post->ID ), "Full");
                echo $imgsrc[0];
              if($width>=640 and $height>=360){
                  $has_thumbnail_proper_dimension=true;
               }
        }

        $has_thumbnail = apply_filters( 'wypiekacz_check_thumbnail', $has_thumbnail, $post_id, $post_data );

        if ( !$has_thumbnail ) {
            $this->errors[] = array( 'post_thumbnail', __('Post thumbnail (Featured image) is required.', 'wypiekacz') );
        }
        if ( !$has_thumbnail_proper_dimension ) {
            $this->errors[] = array( 'post_thumbnail', __('Post thumbnail (Featured image) should be atleast 640x360.', 'wypiekacz') );
        }

अच्छी तरह से मुझे समझ नहीं आ रहा है कि "मीडिया लाइब्रेरी टैब" से आपका क्या मतलब है।


आप एक खूबसूरत पुरुष हैं! अच्छी तरह से काम! "मीडिया लाइब्रेरी टैब" मीडिया अपलोड स्क्रीन में है, जैसे आप मीडिया के लिए "सेट फीचर्ड इमेज" या "अपलोड / इंसर्ट" पर क्लिक करते हैं। यहाँ मेरे विचार का एक स्क्रीनशॉट है - picasaweb.google.com/lh/photo/…
ट्रैविस पीफ्लानज़

मैंने एक बदलाव किया। केवल फीचर्ड इमेज के आयामों की जांच list($url, $width, $height) = wp_get_attachment_image_src($post_id, 'full');करने के list($url, $width, $height) = wp_get_attachment_image_src(get_post_thumbnail_id( $post->ID ), "Full"); echo $imgsrc[0];लिए बदल दिया गया है , और सभी संलग्न चित्र नहीं।
ट्रैविस Pflanz

@TravisPflanz यह वह फ़ंक्शन है जो "मेडियल लाइब्रेरी टैब" की पंक्ति को आउटपुट करता है codex.wordpress.org/Function_Reference/get_media_item यहाँ कोई फ़िल्टर नहीं है इसलिए मुझे नहीं लगता कि आप इसे वर्डप्रेस फ़ाइल में हुकिंग करके बदल सकते हैं .... आप स्वीकार कर सकते हैं उत्तर / upvote अगर उपयोगी हो तो ......
राजीव व्यास

2

मैंने कोर की जाँच की और जाहिर तौर पर पैंतरेबाज़ी के लिए बहुत कम जगह है।

/wp-admin/includes/media.php वह जगह है जहां मीडिया जोड़ें टैब उत्पन्न होते हैं

फ़ंक्शन get_media_item पंक्ति 1034 में वह है जो अनुलग्नकों / मीडिया तालिका को प्रस्तुत करता है। मैं इसमें उपलब्ध किसी भी फ़िल्टर या पिछले फ़ंक्शन को नहीं देख सकता जो इसे कहते हैं।

मुद्दे के आसपास कुछ संदर्भ और कोड नमूने।

मुझे लगता है कि अपलोड किए गए चित्रों के शीर्षक को बदलने और इसके आयामों को जोड़ने के लिए एक वैकल्पिक समाधान होगा। मुझे अपलोड की गई फ़ाइल के post_title को बदलने के बारे में निश्चित नहीं है, लेकिन इस दो फ़िल्टर के साथ फ़ाइल का नाम बदलकर ही प्राप्त किया जा सकता है: sanitize_file_name और wp_handle_upload_prefilter


तो, आप क्या कह रहे हैं कि यह संभव हो सकता है ... हो सकता है? मैं वास्तव में कोई कोडर नहीं हूं, इसलिए जब मैं लेखन कार्यों की बात करता हूं तो मैं दूसरों की दया पर होता हूं। किसी भी समर्थन महान होगा।
ट्रैविस Pflanz

1

पूरा जवाब नहीं और इनाम के लिए नहीं, बस एक सबूत है कि मूल अवधारणा काम करती है:

function wpse_attachment_dimension_check( $form_fields, $post ) {

    $meta = wp_get_attachment_metadata($post->ID);

    if ( !empty[$meta['width']] )
        if ( $meta['width'] <= 999 or $meta['height'] <= 349 ) 
        {   
            echo '<p class="error">Image dimensions ...bla</p>';
            exit;
        }
        else
        {
             // Return all form fields
             return $form_fields;
        }
}

add_filter( 'attachment_fields_to_edit', 'wpse_attachment_dimension_check', 10, 2 );

बस एक 60 सेकंड्सस्नीपसेट और एक बड़ी समस्या है: यह हर अपलोड के लिए आग देगा, और न केवल अगर कोई व्यक्ति विशेष रुप से छवि जोड़ने के लिए है, क्योंकि हमारे पास छवि अपलोडर के संदर्भ को प्राप्त करने का कोई तरीका नहीं है। इसके चारों ओर काम करने के कुछ तरीके हैं, मूल रूप से कुछ जेएस हेरफेर के साथ।

मुझे अभी काम करना चाहिए, और इसके साथ प्रयोग करने का समय नहीं है। लेकिन मैं जितना संभव हो उतना मदद करना चाहता था, और शायद यह दूसरों के लिए एक शुरुआती बिंदु है।

चियर्स


उत्तर के लिए धन्यवाद, आपका कोड अनिवार्य रूप से Maor Barazany का कोड क्या करता है (जो प्रश्न में जुड़ा हुआ है), हालांकि आपका बहुत बेहतर है।
ट्रैविस Pflanz

1

यह सबसे सुंदर जवाब नहीं है ... लेकिन यह काम करता है! 'वायपीकज' प्लगइन, हालांकि शांत, तीन साल में अद्यतन नहीं किया गया है।

add_action('transition_post_status', 'check_featured_image_size_after_save', 10, 3);

function check_featured_image_size_after_save($new_status, $old_status, $post){
  $run_on_statuses = array('publish', 'pending', 'future');
  if(!in_array($new_status, $run_on_statuses))
    return;

  $post_id = $post->ID;
  if ( wp_is_post_revision( $post_id ) )
    return; //not sure about this.. but apparently save is called twice when this happens

  $image_data = wp_get_attachment_image_src( get_post_thumbnail_id( $post_id ), "Full" );
  if(!$image_data)
    return; //separate message if no image at all. (I use a plugin for this)

  $image_width = $image_data[1];
  $image_height = $image_data[2];

  // replace with your requirements.
  $min_width = 900;
  $min_height = 400;
  if($image_width < $min_width || $image_height < $min_height){
    // Being safe, honestly $old_status shouldn't be in $run_on_statuses... it wouldn't save the first time!
    $reverted_status = in_array($old_status, $run_on_statuses) ? 'draft' : $old_status;
    wp_update_post(array(
      'ID' => $post_id,
      'post_status' => $reverted_status,
    ));
    $back_link = admin_url("post.php?post=$post_id&action=edit");
    wp_die("Featured Image not large enough, must be at least ${min_width}x$min_height. Reverting status to '$reverted_status'.<br><br><a href='$back_link'>Go Back</a>");
  }
}

सबसे अच्छा उपयोगकर्ता अनुभव के साथ सबसे सुरुचिपूर्ण समाधान त्वरित संपादन और पोस्ट संपादन पृष्ठ दोनों के लिए इसे संभालने के लिए जावास्क्रिप्ट का उपयोग करेगा। फिर सौभाग्य के लिए मैं update_post_metadataफ़िल्टर में कुछ जोड़ूंगा (जो कि चित्रित छवि को रोकने के लिए पूरी तरह से काम करता है लेकिन यह चेतावनी नहीं देगा क्योंकि यह AJAX के साथ चलाया जाता है)।

व्यवस्थापक नोटिस नहीं दिखाएंगे क्योंकि वर्डप्रेस पुनर्निर्देशित करता है, और तब भी क्विक एडिट पर दिखाई नहीं देगा (मेरी विधि क्विक एडिट पर एक चेतावनी दिखाती है हालांकि यह स्टाइल नहीं है)।


क्या यह परीक्षण किया गया है? मुझे कुछ समय में ऐसा करने की आवश्यकता नहीं है, लेकिन बुकमार्क करना अच्छा है।
ट्रैविस पीफ्लैजा

हो सकता है कि सोमवार को मैं इसे हमारे स्टेजिंग सर्वर पर चला सकता हूं, लेकिन मेरे पास इसके उत्पादन पर चलने के समान 99% कुछ है।
रयान टेलर

0

यहां यह सुनिश्चित करने का एक तरीका है कि इसे प्रदर्शित करने से पहले ठीक से थम्बनेल का आकार हो।

सबसे पहले, इस सहायक समारोह बनाएँ:

function has_post_thumbnail_of_size($width, $height) {
    $thumbnail_id = get_post_thumbnail_id();
    if( $thumbnail_id ) {
        $thumbnail_metadata = wp_get_attachment_metadata( $thumbnail_id );
        if( $thumbnail_metadata['height'] >= $height && $thumbnail_metadata['width'] >= $width ) {
            return true;
        }
    }
    return false;
}

तब आप अब थंबनेल प्रदर्शित करने से पहले जांच सकते हैं:

if( has_post_thumbnail_of_size(640, 360) ) {
    the_post_thumbnail();
}

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

परीक्षण करने होंगे, लेकिन एक तरीका यह है कि मैं देख सकता हूं कि यह कैसे किया जा सकता है: जब भी कोई अपलोड सफल होता था, WP बाद में अनुलग्नक विवरण फ़ॉर्म प्रदर्शित करने के लिए ajax के माध्यम से अनुलग्नक डेटा प्राप्त करेगा। इसका मतलब है कि छवि को अनुलग्नक के रूप में डाला गया है और मेटाडेटा उपलब्ध है। आईडीईए: कोई अटैचमेंट_फिल्ड्स_ऑटो_डिट में हुक लगा सकता है, जो अटैचमेंट ऑब्जेक्ट को तर्क के रूप में प्राप्त करता है, फिर मेटाडेटा की ऊँचाई और चौड़ाई की जांच करें, यदि यह चेक विफल नहीं होता है तो हमेशा की तरह अटैचमेंट डिटेल्स फॉर्म न दिखाएं, इसके बजाय एक त्रुटि संदेश दिखाएं और अटैचमेंट को तुरंत हटा दें । एक विचार है।
२२:०२ पर अनसाल्टबार

@ungestaltbar, लगता है कि आपके पास सही विचार है। मैं कोई कोडर नहीं हूं, इसलिए मैं समुदाय की दया पर हूं।
ट्रैविस Pflanz

0

यह whatcha की आवश्यकता होगी :)

//Adding script to deligate Thumbnail Size
if ( function_exists( 'add_theme_support' ) ) {
  add_theme_support( 'post-thumbnails' );
    set_post_thumbnail_size( 960, 276, true ); // default Post Thumbnail dimensions   
}
//Set different Thumbnail Sizes for Later
if ( function_exists( 'add_image_size' ) ) { 
  add_image_size( 'large-thumb', 960, 276, true ); //(cropped)  
  add_image_size( 'medium-thumb', 605, 174, true ); //(cropped) 
  add_image_size( 'small-thumb', 288, 83, true ); //(cropped) 
  add_image_size( 'small-square', 100, 100, true ); //(cropped) 
}

<?php if ( has_post_thumbnail() ) {
      global $post; //I usually define this in the function that outputs this, fyi
      echo '<a href="' . get_permalink( $post->ID ) . '" title="' . esc_attr( $post->post_title ) . '">';
      echo get_the_post_thumbnail($thumbnail->ID, 'small-thumb', array( 'alt' => esc_attr( $post->post_title ), 'title' => esc_attr( $post->post_title ) ));
      echo '</a>'; 
      } else {

      $thumbnails = get_posts(array('numberposts'=>1,'orderby'=>'rand','meta_key' => '_thumbnail_id'));
      foreach ($thumbnails as $thumbnail) {
      echo '<a href="' . get_permalink( $post->ID ) . '" title="' . esc_attr( $post->post_title ) . '">';
      echo get_the_post_thumbnail($thumbnail->ID, 'small-thumb', array( 'alt' => esc_attr( $post->post_title ), 'title' => esc_attr( $post->post_title ) ));
      echo '</a>';
      }           
    }   
    ?>

यह get_the_post_thumbnail का उपयोग कर रहा है, जो आपकी मदद भी कर सकता है, इसलिए आपको fn कोड का एक गुच्छा बनाने की आवश्यकता नहीं थी जिसे वर्डप्रेस पहले से ही आपके लिए संभाल सकता है, बस एक विचार।

$thumbnails = get_posts(array('numberposts'=>1,'orderby'=>'rand','meta_key' => '_thumbnail_id'));यदि कोई मौजूद नहीं है, तो यह एक यादृच्छिक हड़पने के लिए उपयोग करता है, इससे आपको आगे बढ़ने में मदद मिल सकती है।

यह बिट echo get_the_post_thumbnail($thumbnail->ID, 'small-thumb', array( 'alt' => esc_attr( $post->post_title ), 'title' => esc_attr( $post->post_title ) ));नोटिस 'small-thumb'यह उन add_image_size fn से मेल खाता है जो हमने कुछ पंक्तियों को एक साथ रखा है। इसलिए यदि आपके पास होता तो आप वैकल्पिक रूप से add_image_size( 'small-square', 100, 100, true );कॉल कर सकते थे 'small-square'

चियर्स


उत्तर के लिए धन्यवाद। हालांकि मुझे इसकी आवश्यकता नहीं है। वेबसाइट एक एमएलबी बेसबॉल वेबसाइट है, इसलिए अल्बर्ट पुजोल्स की एक यादृच्छिक तस्वीर राजकुमार फील्डर के बारे में एक लेख में जोड़ने के लिए काम नहीं करेगी, अगर आपको मेरा मतलब है ... इसके अलावा, जैसा कि मैंने ऊपर उल्लेख किया है, मैं WyPiekz प्लगइन का उपयोग करता हूं उपयोगकर्ताओं को एक चित्रित छवि जोड़ने के लिए मजबूर करें। इसलिए, मुद्दा यह नहीं है कि क्या वे एक छवि जोड़ते हैं, बल्कि इसके बजाय मैं उन्हें एक छवि जोड़ने के लिए मजबूर करना चाहता हूं जो 640 से अधिक चौड़ी और 360 लंबी हो।
ट्रैविस Pflanz
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.