이미지 첨부 파일의 대체 텍스트를 검색하는 방법?


32

attachment.php 파일을 사용하여 다른 곳에서 클릭 한 큰 이미지 버전을 보여줍니다. javascript를 사용하여 이미지 아래에 이미지 대체 텍스트를 캡션으로 가져오고 싶지만 wp_get_attachment_image_src ()를 사용할 때 대체 텍스트가 포함되지 않습니다. WP에는 그것을 검색하는 기능이 없다고 생각하므로 내 것이 필요합니다. 이 함수를 작성하려면 알아야 할 ... 이미지의 대체 텍스트는 어디에 저장됩니까?

첨부 파일 페이지에는를 사용 wp_get_attachment_image_src()하지만 대체 텍스트는 포함되지 않습니다.

<div class = "entry">
<?php 
if ( wp_attachment_is_image( $post->id ) ) : 
    $att_image = wp_get_attachment_image_src( $post->id, "large");?>

    <a href="<?php echo wp_get_attachment_url($post->id); ?>" 
        title="<?php the_title(); ?>" 
        rel="attachment">
    <img class="attached_img" 
        src="<?php echo $att_image[0];?>" 
        width="<?php echo $att_image[1];?>" 
        height="<?php echo $att_image[2];?>"  
        class="attachment-medium" 
        alt="<?php $post->post_excerpt; ?>" />
    </a> 
} <?php endif;?>
</div>

이것은 보여줍니다 :

<div class = "entry">
    <a href="http://www.example.com/wp-content/uploads/2010/07/photo_namejpg" 
       title="My_Photo_Title" 
       rel="attachment">
       <img class="attached_img" 
            src="http://www.example.com/wp-content/uploads/2010/07/photo_name_and_size.jpg" 
            width="393" 
            height="500"  
            class="attachment-medium" 
            alt="" />
    </a>
</div>  

$post->post_excerpt위의 코드에서가 호출되고 있음을 알고 있지만 이미지의 대체 속성을 얻기 위해 무엇을 대체 해야할지 잘 모르겠습니다.

답변:


53

나는 최근 최근 클라이언트 프로젝트에 대한 몇 가지 조사를했는데 너무 싸다 -와 - 보라 내가 여기에 그것을 사용하는 얻을!

텍스트 뒤에 WordPress 3.0.1에서 이미지 처리 기능의 대부분 (전체?)으로 분류 된 목록을 볼 수 있습니다 (일부 유사한 순서로 그룹화했지만 분류에 너무 많은 신뢰를 두지 않았습니다).

어쨌든, (내가 생각하는) 당신이 필요 대신 당신이 무엇을 요구의 응답 ( 말, 좋아, 나도 그 대답거야 내가 무엇을 당신이 필요로하는 것은 생각) wp_get_attachment_image()이 속성을 포함하는 HTML 문자열을 반환합니다 기능 :

  • 'src',
  • 'class',
  • 'alt'
  • 'title'.

워드 프레스 3.0 이미지 처리 기능

다음은 귀하 및 다른 사람의 참조를위한 WordPress의 이미지 처리 기능입니다 ( 정확한 질문에 대한 답변을 보려면 아래로 이동하십시오 ).

이미지 지원 / 섬네일

부착

MIME 유형

업로드

파일 시스템

HTML

저수준 이미지 처리 :


약속 한대로 이미지의 'alt'텍스트는 wp_postmeta의 meta_key와 함께 문자열로 저장됩니다'_wp_attachment_image_alt' .

이미 알고 있듯이 다음과 같이 간단하게로드 할 수 있습니다 get_post_meta().

$alt_text = get_post_meta($post->ID, '_wp_attachment_image_alt', true);


1
글쎄, 난 당신이 그것을 말 했으므로 조금 어색한 느낌을 도울 수 없습니다. 나는 전에 사용 wp_get_attachment_imgage()하고 완전히 잊어 버렸습니다. 당신은 내가 실제로 생각한 것에 대해 옳습니다. 정보에 대해서 감사드립니다. 당신은 또한 alt meta가 저장된 곳에 대해 옳습니다 ... 나는 그 곳을 보았지만 그것을 똑바로 쳐다 보았을지라도 나를 피했습니다. 그것이 내가 하루의 끝에서 그것에 도착하는 것입니다. 다시 감사합니다!
kevtrout

이봐, 문제 없어 최근 해커 목록에서도 누군가가 언급하자마자 대답이 눈에 띄게 드러나도록하기 위해 최근의 확실한 질문을했습니다. 여기 저기에 뭔가를 놓치기 쉽습니다. 그러나 워드 프레스 답변의 실질적인 이점은 모든 질문과 답변이 앞으로 비슷한 질문을 가진 다른 사람들을위한 리소스가되는 것입니다. 나는 심지어 내가 대답 한 것을 Google에서 기대하지만 앞으로 포인트를 잊어 버렸습니다!
MikeSchinkel

1
빠른 질문 : wp_get_attachment_image()이미지 src 및 속성의 배열 을 반환 한다고 표시했습니다 . 이미지와 속성을 포함하는 html 만 반환하는 것 같습니다. : 그래도, 당신이하지 않는 기능 심판에 뭔가를 알고 있다면 작업 몰랐다 않습니다 codex.wordpress.org/Function_Reference/wp_get_attachment_image
kevtrout

1
@Mike-wp_get_attachment_image에 대한 메모를 배열로 업데이트하는 간단한 알림-나에게 약간의 충격을주었습니다 :). 그렇지 않으면 훌륭한 답변입니다!
Jonathan Wold

1
매우 자세한 답변입니다.
Bas van Dijk

5

첨부 파일 자체의 WP_Post 오브젝트가있는 wp_prepare_attachment_for_js( $attachment )곳을 살펴보십시오 $attachment.

이것은 약간의 "주방 싱크"기능이지만 'alt'를 포함하여 수많은 메타 데이터로 매우 멋진 해시를 제공합니다.

$response = array(
        'id'          => $attachment->ID,
        'title'       => $attachment->post_title,
        'filename'    => wp_basename( $attachment->guid ),
        'url'         => $attachment_url,
        'link'        => get_attachment_link( $attachment->ID ),
        'alt'         => get_post_meta( $attachment->ID, '_wp_attachment_image_alt', true ),
        'author'      => $attachment->post_author,
        'description' => $attachment->post_content,
        'caption'     => $attachment->post_excerpt,
        'name'        => $attachment->post_name,
        'status'      => $attachment->post_status,
        'uploadedTo'  => $attachment->post_parent,
        'date'        => strtotime( $attachment->post_date_gmt ) * 1000,
        'modified'    => strtotime( $attachment->post_modified_gmt ) * 1000,
        'menuOrder'   => $attachment->menu_order,
        'mime'        => $attachment->post_mime_type,
        'type'        => $type,
        'subtype'     => $subtype,
        'icon'        => wp_mime_type_icon( $attachment->ID ),
        'dateFormatted' => mysql2date( get_option('date_format'), $attachment->post_date ),
        'nonces'      => array(
            'update' => false,
            'delete' => false,
            'edit'   => false
        ),
        'editLink'   => false,
        'meta'       => false,
    );

이는 첨부 파일 이미지 메타를을 통해 wp.media View로 보내는 데 특히 유용하지만 (이름에서 알 수 있듯이) wp_send_ajax()다른 용도로 사용할 수는 없습니다.

_wp_attachment_image_alt대체 텍스트를 검색하는 방법이 변경 될 수있는 경우를 대비 하여 포스트 메타 필드 에서 추상화하는 것이 좋습니다.

wp_get_attachment_image_alt()그러나 방법에 대한 사례가 있다고 생각합니다 .


정확히 내가 찾던 것. 누구나 성능에 대한 아이디어가 있습니까? 너무 많은 다른 값으로 검색 ... 궁금해 ...
Larzan

@Larzan 저는 수백 개의 이미지 데이터를 동시에 얻지 않는 한 성능에 대해 걱정하지 않습니다.
Tom Auger

4

물론 Mike의 대답은 정확하지만 $alt_text = get_post_meta($post->ID, '_wp_attachment_image_alt', true);빈 문자열을 반환 할 수 있습니다.

그러나 wp_get_attachment_image 는 항상 alt_text를 얻습니다.

Wordpress 팀은 먼저 다음과 같은 트릭을 적용하여 post_except를 확인한 다음 제목을 얻습니다.

if(empty($alt_text)) // If not, Use the Caption
{
    $attachment = get_post($post->ID);
    $alt_text = trim(strip_tags( $attachment->post_excerpt ));
}
if(empty($alt_text)) // Finally, use the title
{ 
    $attachment = get_post($post->ID);
    $alt_text = trim(strip_tags( $attachment->post_title )); 
}

2

첨부 파일의 대체 텍스트가 "_wp_attachment_image_alt"라는 맞춤 메타에 저장되어 있음을 확인했습니다.

따라서 첨부 파일의 ID가 있으면이 코드로 대체 텍스트를 얻을 수있었습니다.

<?php echo get_post_meta($attachment_id, '_wp_attachment_image_alt', true) ?>

0

WP_Customize_Media_Control ()을 사용하는 경우 get_theme_mod ()는 게시물 ID를 반환하지만 새로운 WP_Customize_Image_Control ()을 사용하는 경우 get_theme_mod ()는 이미지 URL을 반환합니다. 이것은 WP_Customize_Image_Control을 사용하여 대체 텍스트를 얻는 방법이었습니다 ()

내가 할 수 있었던 방법은 다음과 같습니다. 이것이 누군가를 도울 수 있기를 바랍니다.

// This is getting the image / url
$feature1 = get_theme_mod('feature_image_1');

// This is getting the post id
$feature1_id = attachment_url_to_postid($feature1);

// This is getting the alt text from the image that is set in the media area
$image1_alt = get_post_meta( $feature1_id, '_wp_attachment_image_alt', true );

마크 업

<a href="<?php echo $feature1_url; ?>"><img class="img-responsive center-block" src="<?php echo $feature1; ?>" alt="<?php echo $image1_alt; ?>"></a>

0

Mike의 답변에 추가하면 누군가 유용 할 수 있습니다. 첨부 파일의 특정 ID를 가져와야 할 수 있으므로 Post ID를 get_post_thumbnail_id예제 로 전달하면됩니다 .

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