Como obter o atributo title / alt da imagem?

8

No meu tema branco, não há nenhum atributo alt configurado para a postagem do controle deslizante inicial. Eu adicionei o texto alt para a imagem através da interface da biblioteca de mídia. Eu adicionei o seguinte código para exibir o texto / atributo alt. Mas não é exibido:

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

Aqui está o código:

<?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 .'" />';
  }
?>
    
por Nisha_at_Behance 01.07.2015 / 15:49

3 respostas

21

Você não está fornecendo um ID de admissão correto. Substitua:

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

Com:

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

Nota : Eu assumo que $image->id está correto porque você o usa mais tarde em seu código e obtém o resultado esperado. Unfortunatley $image->id não pode ser testado porque envolve WPGRADE_PREFIX.'homepage_slide_image meta campo que você não forneceu nenhuma informação.

    
por cybmeta 01.07.2015 / 16:41
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 . '" />';

}

por favor note que eu não testei o seu $image->id , apenas assumiu que você tem o ID de anexo correto. O resto vem de $img_meta . Se alt estiver faltando, estamos usando o título da imagem. Se o título estiver faltando, você verá o texto "Título ausente" para que você o preencha.

    
por Benn 02.01.2017 / 17:41
2

Ok, encontrei a resposta que ninguém tem na net que estou procurando há dias. Mantenha no meu isso só funciona se o seu tema ou plugin está usando o WP_Customize_Image_Control () se você estiver usando WP_Customize_Media_Control () o get_theme_mod () irá retornar o ID e não o URL.

Para minha solução eu estava usando a versão mais recente WP_Customize_Image_Control ()

Muitas postagens nos fóruns têm o get_attachment_id () que não funciona mais. Eu usei attachment_url_to_postid ()

Aqui está como eu consegui fazer isso. Espero que isso ajude alguém lá fora

// 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 );

Marcação

<a href="<?php echo $feature1_url; ?>"><img class="img-responsive center-block" src="<?php echo $feature1; ?>" alt="<?php echo $image1_alt; ?>"></a>
    
por DevTurtle 29.04.2017 / 04:30