Remove Dimension from wp_get_attachment_image

10

Estou tendo algum problema ao remover a largura e a altura de minhas imagens de anexos ao usar o wp_get_attachment_image. Isso é o que estou usando para exibir a imagem

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

Como parece o código-fonte

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

Eu gostaria que fosse exibido assim

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

A imagem está sendo extraída de um campo de arquivo repetitivo com uma entrada com um id de slide_image_id. Eu tenho olhado ao redor e tenho notado o uso do wp_get_attachment_image_url, mas quando eu o uso com o código acima, a imagem não é exibida. Há algo que estou fazendo errado?

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

Nota: $ entry ['slide_image_id'] é o que está sendo usado para chamar meu campo de arquivo repetitivo.

    
por user3756781 06.01.2016 / 21:01

3 respostas

8

Seus argumentos para os dois wp_get_attachment_image_url() e wp_get_attachment_image() estão na ordem errada - verifique a documentação vinculada para obter detalhes. Além disso, wp_get_attachment_image_url() retorna um URL, não um elemento de imagem real.

  

A remoção dos atributos width e height dos elementos <img> é   desaconselhável: se o layout da página for de alguma forma influenciado pelo   tamanho da imagem, o layout irá "falha" assim que o CSS que   especifica as dimensões da imagem ou a própria imagem é carregada.

Infelizmente, a função wp_get_attachment_image() está atualmente (como no WordPress 4.4.1) codificada para produzir os atributos width e height <img> (consulte ticket # 14110 ), então você precisará construir a marcação da imagem você mesmo. Isso pode ser feito com sugestões da wp_get_attachment_image() fonte :

<?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( '/>' );
  }
?>
    
por bosco 06.01.2016 / 21:45
11

Solução alternativa

Eu fiz alguns testes / escavações principais e encontrei uma solução alternativa através do filtro 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' );

Isso nos permite remover os atributos height e width da imagem gerada html de wp_get_attachment_image() , sem sair dos cânones reg-ex. Também poderíamos usar o filtro wp_get_attachment_image_src de maneira semelhante para remover a largura / altura , mas mantenha a url .

Notas

Esta solução alternativa também removerá os atributos srcset e sizes . Mas também é possível definir os atributos srcset e tamanhos através do quarto argumento de entrada $attr .

Como mencionado por @bosco, você mudou os argumentos de entrada ícone e tamanho em:

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

Use isso:

echo wp_get_attachment_image( $entry['slide_image_id'], 'full', true );
    
por birgire 06.01.2016 / 23:22
0

Eu simplesmente usei CSS para este. Não funciona em todos os cenários, mas muitas vezes é o suficiente. Vamos dar uma imagem de 300 x 300 pixels:

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

Isso restringe as dimensões da imagem sem perder sua relação entre largura e altura. Caso contrário, você também pode usar o REGEX:

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

Estas foram algumas alternativas. Boa sorte.

    
por JMRC 09.11.2018 / 01:21