¿Cómo obtener el atributo title/alt de una imagen?
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 .'" />';
}
?>

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];

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

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!

$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.

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>

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.
