Wp_get_attachment_image'den Ölçümlendirmeyi Kaldır


10

Wp_get_attachment_image kullanırken ekim görüntüleri genişlik ve yükseklik kaldırma bazı sorun yaşıyorum. Görüntüyü görüntülemek için kullandığım şey bu

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

Kaynak kodu nasıl görünüyor

 <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" />

Bunun gibi görünmesini istiyorum

 <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" />

Görüntü, slide_image_id kimliğine sahip bir girişle tekrarlanabilir bir dosya alanından çekiliyor. Etrafa bakıyorum ve wp_get_attachment_image_url kullanmak için uyarı var ama yukarıdaki kodumla kullandığınızda görüntü görüntülenmiyor. Yanlış yaptığım bir şey var mı?

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

Yan not: $ entry ['slide_image_id'] tekrarlanabilir dosya alanımı çağırmak için kullanılan şeydir.


wp_get_attachment_image_url()bir URL döndürür - resim öğesi değil.
bosco

@Bosco'da aradığım şeyde en iyi çözüm ne olacak
user3756781

Vay canına, img çıktısının her özelliğinin add_filter('wp_get_attachment_image_attributes' ...yalnızca yükseklik ve genişlik dışında filtrelenebilir olması ne kadar can sıkıcı .
squarecandy

Yanıtlar:


9

Her iki Sizin argümanlar wp_get_attachment_image_url()ve wp_get_attachment_image()yanlış sırada - ayrıntılar için bağlantılı belgeleri inceleyin. Ayrıca, wp_get_attachment_image_url()gerçek bir resim öğesi değil bir URL döndürür.

Öğelerden widthve heightniteliklerinin kaldırılması <img>önerilmemektedir: sayfanın düzeni görüntünün boyutundan herhangi bir şekilde etkileniyorsa, düzen, görüntünün boyutlarını belirten veya görüntünün kendisi yüklenir yüklenmez "hata verir".

Ne yazık ki, wp_get_attachment_image()işlev şu anda (WordPress 4.4.1'den itibaren) widthve height <img>özniteliklerini çıkarmak için sabit kodlanmıştır (bkz. Bilet # 14110 ), bu nedenle görüntü işaretlemesini kendiniz oluşturmanız gerekir. Bu, wp_get_attachment_image()kaynağından ipuçları alarak yapılabilir :

<?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( '/>' );
  }
?>

Bana gönderdiğiniz bağlantıyı takip ettim ve çözümünüzü kullanmanın yanı sıra sorunsuz bir şekilde görüntü oluşturmayı başardım. Tek sorun nasıl alt etiketi ile yaşıyorum. Bana gönderilen bağlantı ile bir alt etiketi oluşturulmaz ve seninki ile statik (bu yüzden wp_get_attachment_image en iyi seçenek olacağını düşündüm). Görüntülemekte olduğunuz örnekle birlikte bir alt etiketi nasıl oluştururum? @bosco
user3756781

Sorun beklediğimden daha karmaşıktı. Yanıtım, <img>özellik üretme bitlerini içerecek şekilde güncellendi wp_get_attachment_image()- ancak duyarlı görüntüler için kullanılan parçaları srcsetve sizesparçaları dışarıda bıraktım . Bunlara ihtiyaç duyulursa, bir işlev oluşturulması get_sizeless_attachment_image()tavsiye edilir.
bosco

teşekkür ederim bu mükemmel çalıştı. Bir miss karakter echo kodunda bir hata oluştu ($ name. '= "'. $ Value. '"'; Echo ($ name. '= "'. $ Value. '"') ;. Yardımınız için tekrar teşekkür ederiz @bosco
user3756781

12

Geçici çözüm

Bazı çekirdek kazma / testler yaptım ve wp_constrain_dimensionsfiltre aracılığıyla bir çözüm buldum :

// 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' );

Bu , reg-ex kanunları çıkarmadan oluşturulan görüntü html'sinin yükseklik ve genişlik niteliklerini kaldırmamıza izin veriyor gibi görünüyor wp_get_attachment_image(). Biz de kullanabilirsiniz wp_get_attachment_image_srckaldırmak için benzer şekilde filtreyi genişlik / yükseklik ama tutmak url .

notlar

Bu geçici çözüm srcsetve sizesözniteliklerini de kaldıracaktır . Ama ayarlamak da mümkündür srcset ve boyutları dördüncü aracılığıyla özelliklerini $attrgirdi argüman.

@Bosco tarafından belirtildiği gibi, simge ve boyut giriş argümanlarını şu şekilde değiştirdiniz:

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

Bunun yerine şunu kullanın:

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

1

Bunun için sadece CSS kullandım. Tüm senaryolarda işe yaramaz, ancak çoğu zaman yeterlidir. 300px x 300px boyutunda bir resim çekelim:

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

Bu, genişlik / yükseklik oranını kaybetmeden görüntünün boyutlarını kısıtlar. Aksi takdirde REGEX'i de kullanabilirsiniz:

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

Bunlar bazı alternatiflerdi. İyi şanslar.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.