Удалить измерение из 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'] - это то, что используется для вызова моего повторяемого поля файла.

user3756781
источник
wp_get_attachment_image_url()возвращает URL - не элемент изображения.
Боско
Что будет лучшим решением в том, что я ищу @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( '/>' );
  }
?>
Bosco
источник
Я перешел по ссылке, которую вы мне прислали, и смог создать изображение без проблем, а также с помощью вашего решения. Единственная проблема, которую я имею, как это с тегом alt. По ссылке, которую вы мне прислали, тэг alt не генерируется, а по вашей - статический (именно поэтому я подумал, что wp_get_attachment_image будет лучшим вариантом). Как мне сгенерировать тэг alt с примером, который вы показываете? @bosco
user3756781
Вопрос оказался сложнее, чем я ожидал. Обновлен мой ответ, включив в него <img>биты поколения атрибут из wp_get_attachment_image()- хотя я ушел из srcsetи sizesдетали , используемые для чувствительных изображений. Если это необходимо, get_sizeless_attachment_image()рекомендуется создать функцию .
Боско
спасибо, это сработало идеально. В коде произошла ошибка do с пропущенным символом echo ($ 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(), не выходя из регулярных канонов. Мы также можем использовать wp_get_attachment_image_srcфильтр аналогичным образом, чтобы удалить ширину / высоту, но сохранить URL-адрес .

Заметки

Это решение будет удалить srcsetи sizesатрибуты. Но также возможно установить атрибуты srcset и sizes через четвертый $attrвходной аргумент.

Как уже упоминалось @bosco, вы переключили входные аргументы иконки и размера в:

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

Используйте это вместо:

echo wp_get_attachment_image( $entry['slide_image_id'], 'full', true );
birgire
источник
1

Я просто использовал CSS для этого. Это не работает во всех сценариях, но достаточно часто это будет. Давайте возьмем изображение размером 300 на 300 пикселей:

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

Это ограничивает размеры изображения без потери соотношения его ширины к высоте. В противном случае вы также можете использовать REGEX:

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

Это были некоторые альтернативы. Удачи.

JMRC
источник