Видаліть параметр з 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" />

Зображення витягується з файлу, що повторюється, із записом із ідентифікатором slide_image_id. Я дивився навколо і помічаю використовувати wp_get_attachment_image_url, але коли я використовую його зі своїм вище кодом, зображення не відображається. Чи є щось, що я роблю неправильно?

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

Бічна примітка: $ entry ['slide_image_id'] - це те, що використовується для виклику мого файлу, що повторюється.


wp_get_attachment_image_url()повертає URL - не елемент зображення.
bosco

Що буде найкращим рішенням у тому, що я шукаю @bosco
user3756781

Нічого собі, як прикро, що кожен атрибут виводу img є фільтруваним, за add_filter('wp_get_attachment_image_attributes' ...винятком лише висоти та ширини, кодуються важко.
Squarecandy

Відповіді:


9

Ваші аргументи для обох wp_get_attachment_image_url()і wp_get_attachment_image()в неправильному порядку - перевірте пов'язану документацію для отримання деталей. Крім того, wp_get_attachment_image_url()повертає URL - не фактичний елемент зображення.

Видалення елементів widthта heightатрибутів з <img>елементів не доцільно: якщо на розміщення сторінки яким-небудь чином впливає розмір зображення, макет "зблисне", як тільки CSS, який визначає розміри зображення, або завантажує саме зображення.

На жаль, wp_get_attachment_image()наразі ця функція (як у WordPress 4.4.1) жорстко кодується для виведення атрибутів widthта height <img>атрибутів (див. Квиток № 14110 ), тому вам потрібно буде самостійно скласти розмітку зображення. Це можна зробити, взявши сигнали з wp_get_attachment_image()джерела :

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

Я перейшов за посиланням, яке ви мені надіслали, і міг генерувати зображення без проблем, а також використовуючи ваше рішення. Єдина проблема, яка у мене виникає, як це з тегом alt. За посиланням, яке ви мені надіслали, тег alt не генерується, а з вашим - статичним (саме тому я вважав, що wp_get_attachment_image буде найкращим варіантом). Як я можу генерувати тег alt на прикладі, який ви показуєте? @bosco
user3756781

Питання виявилося складнішим, ніж я передбачав. Я оновив свою відповідь, щоб включити <img>біти покоління атрибутів, wp_get_attachment_image()хоча я не залишив srcsetі sizesчастини, що використовуються для чуйних зображень. Якщо це необхідно, створення функції було get_sizeless_attachment_image()б доцільно.
bosco

дякую, що це спрацювало ідеально. У коді сталася помилка з відлунням символу пропуску ($ name. '= "'. $ Value. '"'; Має бути echo ($ name. '= "'. $ Value. '"') ;. Дякую ще раз за допомогу @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(), не виходячи з reg-ex-канонів. Ми також могли використати wp_get_attachment_image_srcфільтр аналогічним чином, щоб видалити ширину / висоту, але зберегти URL-адресу .

Примітки

Це вирішення також видалить srcsetі sizesатрибути. Але також можна встановити атрибути srcset та size через четвертий $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

Я просто використав CSS для цього. Він працює не у всіх сценаріях, але досить часто буде. Візьмемо зображення розміром 300px x 300px:

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

Це обмежує розміри зображення, не втрачаючи його співвідношення ширини та висоти. В іншому випадку ви також можете використовувати REGEX:

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

Це були деякі альтернативи. Удачі.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.