¿Cómo obtener el atributo title/alt de una imagen?

1 jul 2015, 16:49:50
Vistas: 174K
Votos: 36

En mi tema blanco, no hay ningún atributo alt configurado para el slider de la página de inicio. Agregué el texto alt para la imagen a través de la interfaz de la biblioteca de medios. Agregué el siguiente código para mostrar el texto/atributo alt, pero no se muestra:

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

Aquí está el 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 .'" />';
  }
?>
3
Comentarios

Estás intentando obtener el meta del post de $attachment->ID pero no veo información sobre el objeto $attachment en tu código.

cybmeta cybmeta
1 jul 2015 16:56:53

@cybmeta he obtenido este fragmento de código de aquí http://wordpress.stackexchange.com/questions/185396/getting-the-image-title-alt-attribute-from-the-gallery-shortcode

Nisha_at_Behance Nisha_at_Behance
1 jul 2015 17:06:46
Todas las respuestas a la pregunta 6
0
65

Con solo el ID de un adjunto/imagen se pueden recuperar sus atributos alt y title.

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

Como extra, aquí está cómo recuperar la src de una imagen. Con los atributos anteriores ya tenemos todo lo necesario para construir el markup de una imagen estática.

$size = 'my-size' // Por defecto será 'thumbnail' si se omite.

$image_src = wp_get_attachment_image_src($image_id, $size)[0];
4 mar 2019 13:41:27
0
30

Tu problema es que no estás proporcionando el ID correcto del adjunto a las funciones get_post_meta() y get_the_title().

Este es tu código para obtener el alt de la imagen:

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

Y es correcto, pero $attachment->ID no está definido en tu código, por lo que la función no devuelve nada.

Leyendo tu código, parece que almacenas el ID de la imagen como un campo meta y luego lo obtienes con este código:

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

Entonces, asumiendo que $image->id es correcto en tu código, deberías reemplazar esto:

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

Con:

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

Eso es para obtener el alt, para obtener el título:

 $image_title = get_the_title( $image->id );
1 jul 2015 17:41:31
0

Utilizo una función rápida en todos mis temas para obtener los datos de los archivos adjuntos de imágenes:

//obtener meta datos del adjunto
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
        );
    }
}

¡Espero que esto ayude!

29 ene 2019 18:41:22
0
$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('Título faltante','{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 . '" />';

}

Ten en cuenta que no probé tu $image->id, solo asumí que tienes el ID de adjunto correcto. El resto viene de $img_meta. Si falta el texto alternativo (alt), usamos el título de la imagen, si falta el título verás el texto "Título faltante" para recordarte que lo completes.

2 ene 2017 18:41:44
0

Vale, encontré la respuesta que nadie tiene en la red. Llevo días buscando. Ten en cuenta que esto solo funciona si tu tema o plugin está usando WP_Customize_Image_Control(). Si estás usando WP_Customize_Media_Control(), get_theme_mod() devolverá el ID y no la URL.

Para mi solución, estaba usando la versión más nueva WP_Customize_Image_Control().

Muchas publicaciones en los foros tienen get_attachment_id() que ya no funciona. Yo usé attachment_url_to_postid().

Así es como pude hacerlo. Espero que esto ayude a alguien por ahí.

// Esto obtiene la imagen / URL
$feature1 = get_theme_mod('feature_image_1');

// Esto obtiene el ID del post
$feature1_id = attachment_url_to_postid($feature1);

// Esto obtiene el texto alternativo de la imagen que se establece en el área de medios
$image1_alt = get_post_meta( $feature1_id, '_wp_attachment_image_alt', true );

Marcado

<a href="<?php echo $feature1_url; ?>"><img class="img-responsive center-block" src="<?php echo $feature1; ?>" alt="<?php echo $image1_alt; ?>"></a>
29 abr 2017 05:30:38
0

La forma correcta según WordPress sería utilizar la función proporcionada get_image_tag() para obtener la etiqueta de imagen, pasando los argumentos de ID y alt a la función. Otras respuestas ya explican cómo obtener el atributo alt.

Esta función también se encarga de los atributos srcset y sizes, que de otra manera tendrías que proporcionar manualmente usando wp_get_attachment_image_srcset, para que los navegadores modernos puedan cargar las imágenes de forma optimizada.

8 abr 2021 17:00:37