Come ottenere l'attributo title/alt dell'immagine?
Nel mio tema chiaro, non è configurato alcun attributo alt per il post dello slider della home page. Ho aggiunto il testo alt per l'immagine attraverso l'interfaccia della libreria media. Ho aggiunto il seguente codice per visualizzare il testo/attributo alt, ma non viene visualizzato:
<img class="homepage-slider_image" src="http://www.blabla.com/wp-content/uploads/2013/06/cms-website4-1800x800.jpg" alt="" />
Ecco il codice:
<?php
// Ottiene i metadati dell'immagine dallo slide della homepage
$image = get_post_meta(get_the_ID(), WPGRADE_PREFIX.'homepage_slide_image', true);
if (!empty($image)) {
// Decodifica i dati JSON dell'immagine
$image = json_decode($image);
// Tenta di ottenere l'attributo alt dell'immagine
$image_alt = get_post_meta( $attachment->ID, '_wp_attachment_image_alt', true);
// Se l'alt è vuoto, usa il titolo del post
if ( empty( $image_alt )) {
$image_alt = $attachment->post_title;
}
// Se ancora vuoto, usa l'excerpt del post
if ( empty( $image_alt )) {
$image_alt = $attachment->post_excerpt;
}
// Ottiene il titolo dell'immagine
$image_title = $attachment->post_title;
// Ottiene l'ID dell'immagine
$image_id = $image->id;
// Ottiene l'URL dell'immagine nella dimensione blog-huge
$image = wp_get_attachment_image_src( $image_id, 'blog-huge', false);
// Stampa il tag dell'immagine con l'attributo alt
echo '<img class="homepage-slider_image" src="'.$image[0].'" alt="'. $image_alt .'" />';
}
?>

Per recuperare gli attributi alt e title di un'immagine è sufficiente disporre del suo ID.
$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);
Come bonus, ecco come recuperare lo src di un'immagine. Con gli attributi sopra citati, abbiamo tutto ciò che ci serve per costruire il markup statico di un'immagine.
$size = 'my-size' // Di default è 'thumbnail' se omesso.
$image_src = wp_get_attachment_image_src($image_id, $size)[0];

Il tuo problema è che non stai fornendo l'ID corretto dell'allegato alle funzioni get_post_meta()
e get_the_title()
.
Questo è il tuo codice per ottenere l'alt
dell'immagine:
$image_alt = get_post_meta( $attachment->ID, '_wp_attachment_image_alt', true);
Ed è corretto, ma $attachment->ID
non è definito nel tuo codice, quindi la funzione non restituisce nulla.
Leggendo il tuo codice, sembra che tu memorizzi l'ID dell'immagine come meta campo e poi lo recuperi con questo codice:
$image = get_post_meta(get_the_ID(), WPGRADE_PREFIX.'homepage_slide_image', true);
Quindi, assumendo che $image->id
sia corretto nel tuo codice, dovresti sostituire questo:
$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);
Questo per ottenere l'alt
, per ottenere il titolo:
$image_title = get_the_title( $image->id );

Utilizzo una funzione rapida in tutti i miei temi per ottenere i dati degli allegati immagini:
//ottieni i meta dell'allegato
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
);
}
}
Spero che questo ti sia utile!

$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('Titolo mancante','{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 . '" />';
}
Nota che non ho testato il tuo $image->id
, ho solo assunto che tu abbia il giusto ID dell'allegato. Il resto viene da $img_meta
. Se il testo alternativo (alt) manca, usiamo il titolo dell'immagine, se il titolo manca vedrai il testo "Titolo mancante" per ricordarti di inserirlo.

Ok ho trovato la risposta che nessuno ha in rete, sto cercando da giorni. Tieni presente che questo funziona solo se il tuo tema o plugin utilizza WP_Customize_Image_Control(). Se stai usando WP_Customize_Media_Control(), get_theme_mod() restituirà l'ID e non l'URL.
Per la mia soluzione stavo usando la versione più recente WP_Customize_Image_Control()
Molti post sui forum hanno get_attachment_id() che non funziona più. Ho usato attachment_url_to_postid()
Ecco come sono riuscito a farlo. Spero che questo aiuti qualcuno là fuori
// Questo ottiene l'immagine / url
$feature1 = get_theme_mod('feature_image_1');
// Questo ottiene l'ID del post
$feature1_id = attachment_url_to_postid($feature1);
// Questo ottiene il testo alternativo dall'immagine impostato nell'area media
$image1_alt = get_post_meta( $feature1_id, '_wp_attachment_image_alt', true );
Markup
<a href="<?php echo $feature1_url; ?>"><img class="img-responsive center-block" src="<?php echo $feature1; ?>" alt="<?php echo $image1_alt; ?>"></a>

Il modo corretto in WordPress sarebbe utilizzare la funzione fornita get_image_tag()
per ottenere il tag immagine, passando come argomenti l'id e l'alt alla funzione. Altre risposte spiegano già come ottenere l'attributo alt.
Questa funzione si occupa anche automaticamente degli attributi srcset e sizes, che altrimenti dovresti fornire manualmente usando wp_get_attachment_image_srcset
, per garantire un caricamento ottimizzato delle immagini nei browser moderni.
