Wp_get_attachment_image से आयाम निकालें


10

Wp_get_attachment_image का उपयोग करते समय मैं अपने अटैचमेंट चित्रों से चौड़ाई और ऊंचाई को हटाते हुए कुछ समस्या हो रही है। यह वही है जो मैं छवि प्रदर्शित करने के लिए उपयोग कर रहा हूं

 <?php echo $image = wp_get_attachment_image( $entry['slide_image_id'], true, 'full'); ?>

यह स्रोत कोड कैसा दिखता है

 <img width="150" height="108" src="http://website:8888/wp-content/uploads/2015/12/cupcakes-and-cosmetics-logo.png" class="attachment-1 size-1" alt="cupcakes-and-cosmetics-logo" />

मैं इसे इस तरह प्रदर्शित करना चाहूंगा

 <img src="http://website:8888/wp-content/uploads/2015/12/cupcakes-and-cosmetics-logo.png" class="attachment-1 size-1" alt="cupcakes-and-cosmetics-logo" />

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

 <?php echo $image = wp_get_attachment_image_url( $entry['slide_image_id'], true, 'full'); ?>

साइड नोट: $ प्रविष्टि ['स्लाइड_इमेज_आईडी'] वह है जो मेरे रिपीटेबल फ़ाइल फ़ील्ड को कॉल करने के लिए उपयोग की जा रही है।


wp_get_attachment_image_url()एक URL देता है - एक छवि तत्व नहीं।
बोसको

मैं @bosco
user3756781

वाह, यह कितना कष्टप्रद है कि add_filter('wp_get_attachment_image_attributes' ...केवल ऊंचाई और चौड़ाई को छोड़कर , img आउटपुट की हर विशेषता फ़िल्टर योग्य है ।
चौकोर डेन्ची

जवाबों:


9

दोनों के लिए आपके तर्क wp_get_attachment_image_url()और wp_get_attachment_image()गलत क्रम में हैं - विवरण के लिए लिंक किए गए दस्तावेज़ीकरण की जांच करें। इसके अतिरिक्त, wp_get_attachment_image_url()एक URL लौटाता है - एक वास्तविक छवि तत्व नहीं।

निकाल रहा है widthऔर heightसे गुण <img>तत्वों अनुचित है: अगर पेज के लेआउट छवि का आकार से प्रभावित किसी भी तरह से है, लेआउट होगा "गड़बड़" जैसे ही सीएसएस जो छवि के आयाम निर्दिष्ट करता है, या छवि को ही भार के रूप में।

दुर्भाग्य से, wp_get_attachment_image()समारोह वर्तमान में (वर्डप्रेस 4.4.1 के रूप में) है हार्ड-कोडेड उत्पादन के लिए widthऔर height <img>गुण (देखें टिकट # 14110 ,) ताकि आप छवि मार्कअप खुद का निर्माण करने की आवश्यकता होगी। यह wp_get_attachment_image()'s स्रोत से संकेत लेकर किया जा सकता है :

<?php
  $attachment = get_post( $entry['slide_image_id'] );

  if( $attachment ) {
    $img_size_class = 'full';
    $img_atts = array(
      'src'   => wp_get_attachment_image_url( $entry['slide_image_id'], $img_size_class, false ),
      'class' => 'attachment-' . $img_size_class . ' size-' . $img_size_class,
      'alt'   => trim(strip_tags( get_post_meta( $entry['slide_image_id'], '_wp_attachment_image_alt', true) ) )
    );

    //If an 'alt' attribute was not specified, try to create one from attachment post data
    if( empty( $img_atts[ 'alt' ] ) )
      $img_atts[ 'alt' ] = trim(strip_tags( $attachment->post_excerpt ));
    if( empty( $img_atts[ 'alt' ] ) )
      $img_atts[ 'alt' ] = trim(strip_tags( $attachment->post_title ));

    $img_atts = apply_filters( 'wp_get_attachment_image_attributes', $img_atts, $attachment, $img_size_class );

    echo( '<img ' );
    foreach( $img_atts as $name => $value ) {
      echo( $name . '="' . $value . '" ';
    }
    echo( '/>' );
  }
?>

मैंने आपके द्वारा भेजे गए लिंक का पालन किया और आपके समाधान का उपयोग करने के साथ-साथ समस्या के बिना छवि उत्पन्न करने में सक्षम था। एकमात्र समस्या मुझे हो रही है कि कैसे ऑल्ट टैग के साथ है। आपके द्वारा भेजे गए लिंक से मुझे एक ऑल्ट टैग प्राप्त नहीं हुआ है और आपके साथ यह स्थिर है (यही वजह है कि मुझे लगा कि wp_get_attachment_image सबसे अच्छा विकल्प होगा)। मैं आपके द्वारा दिखाए जा रहे उदाहरण के साथ एक ऑल्ट टैग कैसे बनाऊंगा? @bosco
user3756781

जैसा कि मैंने अनुमान लगाया था कि यह मुद्दा अधिक जटिल हो गया। <img>विशेषता पीढ़ी बिट्स को शामिल करने के लिए मेरे उत्तर को अपडेट किया wp_get_attachment_image()- हालांकि मैंने उत्तरदायी छवियों के लिए उपयोग किए गए भागों srcsetऔर sizesभागों को छोड़ दिया । यदि ये आवश्यक हैं, तो एक समारोह get_sizeless_attachment_image()बनाना उचित होगा।
बोसको

धन्यवाद, यह सही काम किया। कोड के भीतर एक मिस्ड कैरेक्टर इको ($ नाम। '' = '' $ वेल्यू '' '' होने में एक त्रुटि थी; इको होना चाहिए ($ नाम। '' = '' $ वेल्यू '' '');) आपकी मदद के लिए फिर से धन्यवाद @bosco
user3756781

12

वैकल्पिक हल

मैंने कुछ कोर खुदाई / परीक्षण किया और wp_constrain_dimensionsफ़िल्टर के माध्यम से वर्कअराउंड पाया :

// Add filter to empty the height/width array
add_filter( 'wp_constrain_dimensions', '__return_empty_array' );
// Display image html
echo wp_get_attachment_image( $entry['slide_image_id'], 'full', true );
// Remove filter again
remove_filter( 'wp_constrain_dimensions', '__return_empty_array' );

ऐसा लगता है कि हमें रेग-एक्सॉन कैनन से बाहर निकाले बिना, उत्पन्न छवि HTML से ऊंचाई और चौड़ाई विशेषताओं को हटाने की अनुमति देता है wp_get_attachment_image()। हम चौड़ाई / ऊँचाईwp_get_attachment_image_src को हटाने के लिए फ़िल्टर का उपयोग समान तरीके से कर सकते हैं लेकिन url को बनाए रख सकते हैं ।

टिप्पणियाँ

यह समाधान srcsetऔर sizesविशेषताओं को भी हटा देगा । लेकिन चौथे इनपुट तर्क के माध्यम से srcset और आकारों की विशेषताओं को सेट करना भी संभव है $attr

जैसा कि @bosco द्वारा बताया गया है, आपने आइकन और आकार इनपुट तर्कों को इसमें बदल दिया है:

echo wp_get_attachment_image( $entry['slide_image_id'], true, 'full' );

इसके बजाय इसका उपयोग करें:

echo wp_get_attachment_image( $entry['slide_image_id'], 'full', true );

1

मैं बस इस एक के लिए सीएसएस का इस्तेमाल किया। यह सभी परिदृश्यों में काम नहीं करता है, लेकिन अक्सर यह पर्याप्त होगा। आइए एक 300px x 300px छवि लें:

max-height: 300px;
max-width: 300px;
width: auto;

यह ऊँचाई के अनुपात में इसकी चौड़ाई को खोए बिना छवि के आयामों को बाधित करता है। अन्यथा आप REGEX का भी उपयोग कर सकते हैं:

$html = preg_replace(array('/width="[^"]*"/', '/height="[^"]*"/'), '', $html);

ये कुछ विकल्प थे। सौभाग्य।

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