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

id가 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을 반환합니다.

요소 에서 widthheight속성을 제거하는 <img>것은 바람직하지 않습니다. 페이지의 레이아웃이 이미지의 크기에 영향을받는 경우 이미지의 크기를 지정하는 CSS 또는 이미지 자체가로드되는 즉시 레이아웃이 "고정"됩니다.

불행히도이 wp_get_attachment_image()함수는 현재 (워드 프레스 4.4.1부터) widthheight <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()srcsetsizesget_sizeless_attachment_image()
bosco

이것이 완벽하게 작동 주셔서 감사합니다. 누락 된 문자 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을 유지할 수 있습니다.

노트

이 해결 방법은 srcsetsizes속성도 제거합니다 . 그러나 네 번째 입력 인수를 통해 srcsetsize 속성 을 설정할 수도 있습니다 $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);

이것들은 몇 가지 대안이었습니다. 행운을 빕니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.