Come Recuperare il Testo Alt di un'Immagine Allegata?
Sto utilizzando un file attachment.php per mostrare versioni grandi delle immagini che sono state cliccate altrove. Vorrei estrarre il testo alt come didascalia sotto l'immagine con JavaScript, ma il testo alt non è incluso quando viene utilizzato wp_get_attachment_image_src(). Non credo che WordPress abbia una funzione per recuperarlo, quindi ho bisogno di crearne una mia. Per scrivere quella funzione ho bisogno di sapere... Dove viene memorizzato il testo alt di un'immagine?
La mia pagina degli allegati usa wp_get_attachment_image_src()
, che non include il testo alt.
<div class = "entry">
<?php
if ( wp_attachment_is_image( $post->id ) ) :
$att_image = wp_get_attachment_image_src( $post->id, "large");?>
<a href="<?php echo wp_get_attachment_url($post->id); ?>"
title="<?php the_title(); ?>"
rel="attachment">
<img class="attached_img"
src="<?php echo $att_image[0];?>"
width="<?php echo $att_image[1];?>"
height="<?php echo $att_image[2];?>"
class="attachment-medium"
alt="<?php $post->post_excerpt; ?>" />
</a>
} <?php endif;?>
</div>
Questo mostra:
<div class = "entry">
<a href="http://www.example.com/wp-content/uploads/2010/07/photo_namejpg"
title="My_Photo_Title"
rel="attachment">
<img class="attached_img"
src="http://www.example.com/wp-content/uploads/2010/07/photo_name_and_size.jpg"
width="393"
height="500"
class="attachment-medium"
alt="" />
</a>
</div>
Sono consapevole che $post->post_excerpt
viene chiamato nel codice sopra, ma non sono sicuro con cosa sostituirlo per ottenere l'attributo alt dell'immagine.
Recentemente ho fatto delle ricerche per un progetto di un cliente e guarda un po' ora posso usarle qui!
Dopo il testo troverete un elenco categorizzato della maggior parte (tutte?) le funzioni di gestione delle immagini presenti in WordPress 3.0.1 (le ho raggruppate con un certo ordine, ma non date troppo peso alla mia categorizzazione).
Comunque, rispondendo a quello che (penso) vi serva invece che a quello che avete chiesto (ok, risponderò anche a quello, alla fine), credo che ciò di cui avete bisogno sia la funzione wp_get_attachment_image()
che restituirà una stringa HTML contenente questi attributi:
'src'
,'class'
,'alt'
e'title'
.
Funzioni di Gestione delle Immagini in WordPress 3.0
Ecco le funzioni di gestione delle immagini di WordPress per vostra e altrui referenza (saltate in basso per la risposta alla vostra domanda specifica):
Supporto Immagini/Thumbnail
set_post_thumbnail_size( $width = 0, $height = 0, $crop = FALSE )
add_image_size( $name, $width = 0, $height = 0, $crop = FALSE )
get_intermediate_image_sizes()
wp_constrain_dimensions( $current_width, $current_height, $max_width=0, $max_height=0 )
Allegati
get_attached_file( $attachment_id, $unfiltered = false )
is_local_attachment($url)
update_attached_file( $attachment_id, $file )
wp_attachment_is_image( $post_id = 0 )
wp_count_attachments( $mime_type = '' )
wp_delete_attachment( $post_id, $force_delete = false )
wp_get_attachment_image($attachment_id, $size = 'thumbnail', $icon = false, $attr = '')
wp_get_attachment_image_src($attachment_id, $size='thumbnail', $icon = false)
wp_get_attachment_metadata( $post_id = 0, $unfiltered = false )
wp_get_attachment_thumb_file( $post_id = 0 )
wp_get_attachment_thumb_url( $post_id = 0 )
wp_get_attachment_url( $post_id = 0 )
wp_insert_attachment($object, $file = false, $parent = 0)
wp_update_attachment_metadata( $post_id, $data )
Tipi MIME
wp_match_mime_types($wildcard_mime_types, $real_mime_types)
wp_mime_type_icon( $mime = 0 )
wp_post_mime_type_where($post_mime_types, $table_alias = '')
Upload
File System
HTML
Gestione Immagini di Basso Livello:
wp_load_image( $file )
image_constrain_size_for_editor($width, $height, $size = 'medium')
image_downsize($id, $size = 'medium')
image_get_intermediate_size($post_id, $size='thumbnail')
image_hwstring($width, $height)
image_make_intermediate_size($file, $width, $height, $crop=false)
image_resize( $file, $max_w, $max_h, $crop = false, $suffix = null, $dest_path = null, $jpeg_quality = 90 )
image_resize_dimensions($orig_w, $orig_h, $dest_w, $dest_h, $crop = false)
Come promesso, il testo 'alt'
dell'immagine è memorizzato come stringa in wp_postmeta
con la meta_key '_wp_attachment_image_alt'
.
Come probabilmente già sapete, potete caricarlo con un semplice get_post_meta()
in questo modo:
$alt_text = get_post_meta($post->ID, '_wp_attachment_image_alt', true);

Beh, non posso fare a meno di sentirmi un po' stupido ora che me l'hai fatto notare. Ho usato wp_get_attachment_imgage()
in passato e me ne sono completamente dimenticato. Hai ragione su quello che pensavi mi servisse davvero. Grazie per l'informazione. Hai ragione anche su dove sono memorizzati i meta alt...ho guardato proprio lì, ma mi è sfuggito anche se probabilmente lo stavo fissando direttamente. Questo è quello che succede quando ci si mette alla fine della giornata. Grazie ancora!

Ehi, nessun problema. Anche io ho fatto domande davvero ovvie di recente sulla lista degli hacker solo per scoprire che la risposta era palesemente ovvia non appena qualcuno la menzionava. È facile perdere qualcosa qui e là. Ma il vero vantaggio di WordPress Answers è che ogni domanda e risposta diventa una risorsa per altri con domande simili in futuro. Mi aspetto addirittura che in futuro cercherò su Google cose che ho risposto ma di cui mi sono dimenticato!

Domanda veloce: hai indicato che wp_get_attachment_image()
restituisce un array con lo src dell'immagine e gli attributi. Sembra che restituisca solo HTML contenente l'immagine e i suoi attributi. Funziona comunque, solo che non sapevo se eri a conoscenza di qualcosa che non è nella reference della funzione: http://codex.wordpress.org/Function_Reference/wp_get_attachment_image

@kevtrout: (arrossendo) - Lei ha ragione, signore. Per una volta qui su StackExchange ho solo letto il codice e ho scritto questo senza testarlo. Aggiornerò la risposta più tardi dopo aver soddisfatto gli impegni con i clienti.

@Mike - Solo un rapido promemoria per aggiornare la nota su wp_get_attachment_image come array - quello mi ha fatto un po' impazzire :). Ottima risposta per il resto!

Considera di esaminare wp_prepare_attachment_for_js( $attachment )
, dove $attachment
è l'oggetto WP_Post dell'allegato stesso.
Questa è un po' una funzione "tuttofare", ma fornisce un ottimo hash con una tonnellata di metadati, incluso 'alt':
$response = array(
'id' => $attachment->ID,
'title' => $attachment->post_title,
'filename' => wp_basename( $attachment->guid ),
'url' => $attachment_url,
'link' => get_attachment_link( $attachment->ID ),
'alt' => get_post_meta( $attachment->ID, '_wp_attachment_image_alt', true ),
'author' => $attachment->post_author,
'description' => $attachment->post_content,
'caption' => $attachment->post_excerpt,
'name' => $attachment->post_name,
'status' => $attachment->post_status,
'uploadedTo' => $attachment->post_parent,
'date' => strtotime( $attachment->post_date_gmt ) * 1000,
'modified' => strtotime( $attachment->post_modified_gmt ) * 1000,
'menuOrder' => $attachment->menu_order,
'mime' => $attachment->post_mime_type,
'type' => $type,
'subtype' => $subtype,
'icon' => wp_mime_type_icon( $attachment->ID ),
'dateFormatted' => mysql2date( get_option('date_format'), $attachment->post_date ),
'nonces' => array(
'update' => false,
'delete' => false,
'edit' => false
),
'editLink' => false,
'meta' => false,
);
Questo è particolarmente utile (come suggerisce il nome), per inviare i metadati dell'immagine allegata a una vista wp.media tramite wp_send_ajax()
, ma ciò non significa che non potresti usarlo per altri scopi.
Mi piace astrarre dal campo post meta _wp_attachment_image_alt
, nel caso in cui il metodo per recuperare il testo alternativo dovesse mai cambiare (improbabile, ma concepibile).
Ritengo tuttavia che ci sia un caso per un metodo wp_get_attachment_image_alt()
.

Esattamente quello che stavo cercando. Qualcuno ha un'idea delle sue prestazioni? Con così tanti valori diversi che recupera... Mi chiedo...

La risposta di Mike è corretta, ovviamente, ma $alt_text = get_post_meta($post->ID, '_wp_attachment_image_alt', true);
potrebbe restituire una stringa vuota.
wp_get_attachment_image, tuttavia, ottiene sempre un alt_text.
Il team di WordPress applica il seguente trucco: prima verifica il post_except, poi ottiene il titolo.
if(empty($alt_text)) // Se vuoto, usa la didascalia
{
$attachment = get_post($post->ID);
$alt_text = trim(strip_tags( $attachment->post_excerpt ));
}
if(empty($alt_text)) // Infine, usa il titolo
{
$attachment = get_post($post->ID);
$alt_text = trim(strip_tags( $attachment->post_title ));
}

Ho scoperto che il testo alternativo per gli allegati è memorizzato in un meta personalizzato chiamato "_wp_attachment_image_alt"
Quindi, avendo l'ID dell'allegato, sono riuscito a ottenere il testo alternativo con questo codice:
<?php echo get_post_meta($attachment_id, '_wp_attachment_image_alt', true) ?>

Per aggiungere alla risposta di Mike, qualcuno potrebbe trovare utile questa informazione. Potresti aver bisogno di ottenere l'ID specifico dell'allegato, quindi puoi farlo passando l'ID del Post a get_post_thumbnail_id
esempio:
$the_img = wp_get_attachment_image( get_post_thumbnail_id( get_the_ID() ) );

Se stai utilizzando WP_Customize_Media_Control() la tua funzione get_theme_mod() restituirà l'ID del post, ma se stai utilizzando il nuovo WP_Customize_Image_Control() get_theme_mod() restituirà l'URL dell'immagine. Ecco come sono riuscito a ottenere il testo alternativo utilizzando WP_Customize_Image_Control().
Ecco come ho fatto. Spero che questo possa aiutare 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 impostata 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>
