이미지 제목 / alt 속성을 얻는 방법?


17

내 흰색 테마에는 홈 슬라이더 게시물에 대해 구성된 alt 속성이 없습니다. 미디어 라이브러리 인터페이스를 통해 이미지의 대체 텍스트를 추가했습니다. 대체 텍스트 / 속성을 표시하기 위해 다음 코드를 추가했습니다. 그러나 표시되지 않습니다.

<img class="homepage-slider_image" src="http://www.blabla.com/wp-content/uploads/2013/06/cms-website4-1800x800.jpg" alt="" />

코드는 다음과 같습니다.

<?php
  $image = get_post_meta(get_the_ID(), WPGRADE_PREFIX.'homepage_slide_image', true);
  if (!empty($image)) {
    $image = json_decode($image);
    $image_alt = get_post_meta( $attachment->ID, '_wp_attachment_image_alt', true);
    if ( empty( $image_alt )) {
      $image_alt = $attachment->post_title;
    }
    if ( empty( $image_alt )) {
      $image_alt = $attachment->post_excerpt;
    }
    $image_title = $attachment->post_title;
    $image_id = $image->id;
    $image = wp_get_attachment_image_src( $image_id, 'blog-huge', false);
    echo '<img class="homepage-slider_image" src="'.$image[0].'" alt="'. $image_alt .'" />';
  }
?>

1
게시물 메타를 얻으려고 $attachment->ID하지만 $attachment코드에서 객체에 대한 정보를 볼 수 없습니다 .
cybmeta

@cybmeta 여기에서이 코드 스 니펫을 받았습니다 wordpress.stackexchange.com/questions/185396/…
Nisha_at_Behance

1) wordpress.org/plugins/imageseo 와 같은 플러그인을 사용할 수도 있습니다. 2) wordpress.org/plugins/… 3) wordpress.org/plugins/auto-image-alt 도움이 되길 바랍니다!
제임스

답변:


18

이 게시물은 WordPress 이미지 대체 및 제목을 찾을 때 검색 엔진에서 가장 인기있는 내용이므로 여기에 왔습니다. 대답의 어느 것도 문제의 제목과 일치하는 간단한 해결책을 제공하지 않는 것 같다는 사실에 놀랐습니다. 나는 미래 독자들에게 도움이되기를 바라면서 결국 내가 생각해 낸 것을 버릴 것입니다.

// An attachment/image ID is all that's needed to retrieve its alt and title attributes.
$image_id = get_post_thumbnail_id();

$image_alt = get_post_meta($image_id, '_wp_attachment_image_alt', TRUE);

$image_title = get_the_title($image_id);

보너스로 이미지 src를 검색하는 방법이 있습니다. 위의 속성을 사용하면 정적 이미지의 마크 업을 작성해야합니다.

$size = 'my-size' // Defaults to 'thumbnail' if omitted.

$image_src = wp_get_attachment_image_src($image_id, $size)[0];

나는 당신의 대답과 다른 사람들의 차이를 얻지 못합니다. 문제의 문제는 첨부 파일 ID가 정확하지 않다는 것입니다. 또한 귀하의 답변에는 현재 게시물의 미리보기 이미지에 대한 ID가 있지만 원하는 첨부 파일에는 없습니다. OP의 질문에 대답하거나 해결하지 않습니다.
cybmeta

이미지 ID를 얻는 위치는 귀하에게 달려 있습니다. 어쨌든 downvote에 감사드립니다. 내 답변을 당신에게 붙여 넣는 것이 특히 좋습니다.
leymannx

25

문제는 올바른 첨부 파일의 ID get_post_meta()get_the_title()기능 을 제공하지 않는다는 것입니다.

이것은 alt이미지 를 얻는 코드입니다 .

$image_alt = get_post_meta( $attachment->ID, '_wp_attachment_image_alt', true);

그리고 그것은 정확하지만 $attachment->ID코드에 정의되어 있지 않으므로 함수는 아무것도 반환하지 않습니다.

코드를 읽으면 이미지의 ID를 메타 필드로 저장 한 다음이 코드로 가져 오는 것 같습니다.

$image = get_post_meta(get_the_ID(), WPGRADE_PREFIX.'homepage_slide_image', true);

따라서 $image->id코드에서 올바른 것으로 가정하면 다음을 대체해야합니다.

$image_alt = get_post_meta( $attachment->ID, '_wp_attachment_image_alt', true);

와:

$image_alt = get_post_meta( $image->id, '_wp_attachment_image_alt', true);

즉 얻기위한 alt타이틀을 얻을 :

 $image_title = get_the_title( $image->id );

4

모든 테마에서 빠른 기능을 사용하여 이미지 첨부 데이터를 가져옵니다.

//get attachment meta
if ( !function_exists('wp_get_attachment') ) {
    function wp_get_attachment( $attachment_id )
    {
        $attachment = get_post( $attachment_id );
        return array(
            'alt' => get_post_meta( $attachment->ID, '_wp_attachment_image_alt', true ),
            'caption' => $attachment->post_excerpt,
            'description' => $attachment->post_content,
            'href' => get_permalink( $attachment->ID ),
            'src' => $attachment->guid,
            'title' => $attachment->post_title
        );
    }
}

도움이 되었기를 바랍니다!


2
$image = get_post_meta(get_the_ID(), WPGRADE_PREFIX . 'homepage_slide_image', true);
if (!empty($image)) {
    $image          = json_decode($image);
    $image_id       = $image->id;
    $img_meta       = wp_prepare_attachment_for_js($image_id);
    $image_title    = $img_meta['title'] == '' ? esc_html_e('Missing title','{domain}') : $img_meta['title'];
    $image_alt      = $img_meta['alt'] == '' ? $image_title : $img_meta['alt'];
    $image_src      = wp_get_attachment_image_src($image_id, 'blog-huge', false);

    echo '<img class="homepage-slider_image" src="' . $image_src[0] . '" alt="' . $image_alt . '" />';

}

테스트하지 않았습니다 $image->id. 올바른 첨부 파일 ID가 있다고 가정했습니다. 나머지는에서 나옵니다 $img_meta. alt가 없으면 이미지 제목을 사용하고 있고 제목이 없으면 "제목 누락"텍스트가 표시되어 내용을 채 웁니다.


2

Ok 나는 그물에 아무도 며칠 동안 찾고 있지 않은 답을 찾았습니다. WP_Customize_Media_Control ()을 사용하는 경우 테마 또는 플러그인이 WP_Customize_Image_Control ()을 사용하는 경우에만 작동합니다. get_theme_mod ()는 URL이 아닌 ID를 반환합니다.

내 솔루션을 위해 최신 버전 WP_Customize_Image_Control ()을 사용하고있었습니다.

포럼의 많은 게시물에는 더 이상 작동하지 않는 get_attachment_id ()가 있습니다. attachment_url_to_postid ()를 사용했습니다.

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

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