Come ottenere l'attributo title/alt dell'immagine?

1 lug 2015, 16:49:50
Visualizzazioni: 174K
Voti: 36

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 .'" />';
  }
?>
3
Commenti

Stai cercando di ottenere il post meta di $attachment->ID ma non vedo alcuna informazione sull'oggetto $attachment nel tuo codice.

cybmeta cybmeta
1 lug 2015 16:56:53

@cybmeta ho preso questo snippet di codice da qui http://wordpress.stackexchange.com/questions/185396/getting-the-image-title-alt-attribute-from-the-gallery-shortcode

Nisha_at_Behance Nisha_at_Behance
1 lug 2015 17:06:46
Tutte le risposte alla domanda 6
0
65

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];
4 mar 2019 13:41:27
0
30

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 );
1 lug 2015 17:41:31
0

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!

29 gen 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('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.

2 gen 2017 18:41:44
0

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>
29 apr 2017 05:30:38
0

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.

8 apr 2021 17:00:37