Come recuperare il testo alternativo di un allegato immagine?


32

Sto usando un file allegato.php per mostrare grandi versioni di immagini che sono state cliccate altrove. Vorrei estrarre il testo alternativo dell'immagine come didascalia sotto l'immagine con javascript, ma il testo alternativo non è incluso quando viene utilizzato wp_get_attachment_image_src (). Non penso che WP abbia una funzione per recuperarlo, quindi ho bisogno della mia. Per scrivere quella funzione devo sapere ... Dov'è memorizzato il testo alternativo per un'immagine?

La mia pagina degli allegati utilizza wp_get_attachment_image_src(), che non include il testo alternativo.

<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_excerptviene chiamato nel codice sopra, ma non sono sicuro di come sostituirlo per ottenere l'attributo alt dell'immagine.

Risposte:


53

Recentemente ho fatto qualche ricerca per un progetto client di recente, quindi ecco, posso usarlo qui!

Dopo il testo vedrai un elenco categorizzato della maggior parte (tutte?) Delle funzioni di gestione delle immagini all'interno di WordPress 3.0.1 (le ho raggruppate in una parvenza di ordine, ma non ho dato troppa credibilità alla mia categorizzazione).

Ad ogni modo, rispondendo a ciò che (penso) ti serve invece di quello che hai chiesto ( okay, risponderò anch'io, alla fine ) Penso che ciò di cui hai bisogno sia la wp_get_attachment_image()funzione che restituirà una stringa HTML contenente questi attributi:

  • 'src',
  • 'class',
  • 'alt' e
  • 'title'.

Funzioni di gestione delle immagini di WordPress 3.0

Ecco quindi le funzioni di gestione delle immagini di WordPress per il tuo riferimento e quello di altri ( vai sotto per la risposta alla tua domanda esatta ):

Supporto immagine / miniature

attaccamento

Tipi MIME

Upload

filesystem

HTML

Gestione delle immagini a basso livello:


Come promesso, il testo dell'immagine 'alt'viene archiviato come stringa wp_postmetacon la meta_key di'_wp_attachment_image_alt' .

Come probabilmente già saprai, puoi caricarlo in modo semplice get_post_meta():

$alt_text = get_post_meta($post->ID, '_wp_attachment_image_alt', true);


1
Bene, non posso fare a meno di sentirmi un po 'drogato ora che l'hai detto. L'ho usato wp_get_attachment_imgage()prima e me ne sono completamente dimenticato. Hai ragione su quello che pensavi avessi davvero bisogno. Grazie per le informazioni. Hai anche ragione su dove è memorizzato l'alt meta ... Ho guardato proprio in quel posto, ma mi ha eluso anche se dovevo averlo fissato. Questo è quello che ottengo per entrarci alla fine della giornata. Grazie ancora!
kevtrout,

Ehi, nessun problema. Ho fatto alcune domande molto ovvie anche nel recente passato nell'elenco degli hacker solo per avere la risposta palesemente ovvia da essere appena qualcuno l'ha menzionata. È facile perdere qualcosa qui o là. Ma il vero vantaggio di WordPress Answers è che ogni domanda e risposta diventa una risorsa per gli altri con domande simili in futuro. Mi aspetto anche che google abbia risposto ma ho dimenticato i punti in futuro!
MikeSchinkel,

1
Domanda rapida: hai indicato che wp_get_attachment_image()restituisce una matrice dell'immagine e degli attributi src. Sembra restituire solo HTML contenente l'immagine e i suoi attributi. Fa
kevtrout

1
@Mike - Solo un breve promemoria per aggiornare la nota su wp_get_attachment_image come un array - che mi ha sconcertato un po ':). Ottima risposta altrimenti!
Jonathan Wold,

1
Risposta molto dettagliata, ben fatta!
Bas van Dijk,

5

Prendi in considerazione l'idea di wp_prepare_attachment_for_js( $attachment )dove si $attachmenttrova l'oggetto WP_Post dell'allegato stesso.

Questa è una sorta di funzione "lavello della cucina", ma fornisce un ottimo hash con una tonnellata di metadati, tra cui '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,
    );

Ciò è particolarmente utile (come suggerisce il nome), per inviare il meta immagine dell'allegato a una vista wp.media tramite wp_send_ajax(), ma ciò non significa che non sia possibile utilizzarlo per altri scopi.

Mi piace astrarre dal _wp_attachment_image_altpost meta campo, nel caso in cui il metodo per recuperare il testo alternativo cambi mai (improbabile, ma concepibile).

Sento comunque che esiste un caso per un wp_get_attachment_image_alt()metodo.


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

@Larzan Non mi preoccuperei delle prestazioni - a meno che tu non stia ottenendo centinaia di dati di immagini contemporaneamente ...
Tom Auger

4

La risposta di Mike è corretta, ovviamente, ma $alt_text = get_post_meta($post->ID, '_wp_attachment_image_alt', true);può restituire una stringa vuota.

wp_get_attachment_image , tuttavia, ottiene sempre un alt_text.

Il team di Wordpress applica il trucco seguente, prima controllando il post_except, quindi ottenendo il titolo.

if(empty($alt_text)) // If not, Use the Caption
{
    $attachment = get_post($post->ID);
    $alt_text = trim(strip_tags( $attachment->post_excerpt ));
}
if(empty($alt_text)) // Finally, use the title
{ 
    $attachment = get_post($post->ID);
    $alt_text = trim(strip_tags( $attachment->post_title )); 
}

2

Ho scoperto che il testo alternativo per gli allegati era archiviato in una meta personalizzata denominata "_wp_attachment_image_alt"

Quindi, avendo l'ID dell'allegato, sono stato in grado di ottenere il testo alternativo con questo codice:

<?php echo get_post_meta($attachment_id, '_wp_attachment_image_alt', true) ?>

0

Se stai usando WP_Customize_Media_Control () il tuo get_theme_mod () restituirà l'ID del post ma se stai usando il nuovo WP_Customize_Image_Control () get_theme_mod () restituirà l'immagine url così ho potuto ottenere il testo alternativo dall'uso di WP_Customol_Image ()

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>

0

Per aggiungere alla risposta di Mike qualcuno potrebbe trovarlo utile. Potrebbe essere necessario ottenere l'ID specifico dell'allegato, quindi puoi farlo passando l'ID post get_post_thumbnail_idnell'esempio:

  $the_img = wp_get_attachment_image( get_post_thumbnail_id( get_the_ID() ) );
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.