Come ottenere il titolo dell'immagine / l'attributo alt?


17

Nel mio tema bianco, non esiste alcun attributo alt configurato per il post del dispositivo di scorrimento principale. Ho aggiunto il testo alternativo per l'immagine tramite l'interfaccia della libreria multimediale. Ho aggiunto il seguente codice per visualizzare il testo / attributo alt. Ma non visualizza:

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

Ecco il codice:

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

1
Stai cercando di ottenere il post meta di $attachment->IDma non riesco a vedere alcuna informazione $attachmentsull'oggetto nel tuo codice.
cybmeta,

@cybmeta ho ricevuto questo frammento di codice da qui wordpress.stackexchange.com/questions/185396/…
Nisha_at_Behance,

Risposte:


17

È venuto qui come questo post è tra i migliori successi sul motore di ricerca quando si cerca alt immagine e titolo WordPress. Essendo piuttosto sorpreso dal fatto che nessuna delle risposte sembri fornire una soluzione semplice che corrisponda al titolo della domanda, lascerò cadere quello che ho trovato alla fine sperando che aiuti i futuri lettori.

// An attachment/image ID is all that's needed to retrieve its alt and title attributes.
$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 un'immagine src. Con gli attributi di cui sopra è tutto ciò che serve per creare il markup di un'immagine statica.

$size = 'my-size' // Defaults to 'thumbnail' if omitted.

$image_src = wp_get_attachment_image_src($image_id, $size)[0];

Non capisco la differenza nella tua risposta e negli altri. Il problema nella domanda era che l'ID allegato non era corretto e questa è la risposta. Inoltre, nella tua risposta, ottieni l'ID per la miniatura del post corrente, ma non per l'allegato desiderato. quindi non risponde / risolve la domanda del PO.
cybmeta,

La destinazione del tuo ID immagine dipende da te. Ma grazie comunque per il downvote. Soprattutto gentile da parte tua incollare la mia risposta nella tua.
leymannx,

25

Il tuo problema è che non stai fornendo l'ID get_post_meta()e le get_the_title()funzioni dell'allegato corretti .

Questo è il tuo codice per ottenere altl'immagine:

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

Ed è corretto, ma $attachment->IDnon è definito nel 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 ottieni con questo codice:

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

Quindi, supponendo che $image->idsia corretto nel codice, è necessario 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 il alt, per ottenere il titolo:

 $image_title = get_the_title( $image->id );

4

Uso una funzione rapida in tutti i miei temi per ottenere i dati relativi agli allegati delle immagini:

//get attachment meta
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 sia di aiuto!


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 . '" />';

}

tieni presente che non ho testato il tuo $image->id, ho solo ipotizzato di avere l'ID allegato corretto. Il resto viene $img_meta. Se alt manca, stiamo usando il titolo dell'immagine, se manca il titolo vedrai il testo "Titolo mancante" per spingerti a riempirlo.


2

Ok ho trovato la risposta che nessuno ha in rete che cercavo da giorni ormai. Tieni presente che funziona solo se il tuo tema o plugin utilizza WP_Customize_Image_Control () se stai utilizzando 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 nei 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

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

markup

<a href="<?php echo $feature1_url; ?>"><img class="img-responsive center-block" src="<?php echo $feature1; ?>" alt="<?php echo $image1_alt; ?>"></a>
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.