Cum Să Preluăm Textul Alt Al Unei Imagini Atașate?
Folosesc un fișier attachment.php pentru a afișa versiuni mari ale imaginilor care au fost accesate în altă parte. Aș dori să extrag textul alt ca o legendă sub imagine folosind javascript, dar textul alt nu este inclus când se folosește wp_get_attachment_image_src(). Nu cred că WordPress are o funcție pentru a-l prelua, așa că am nevoie de una proprie. Pentru a scrie acea funcție trebuie să știu... Unde este stocat textul alt pentru o imagine?
Pagina mea de atașamente folosește wp_get_attachment_image_src()
, care nu include textul 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>
Aceasta afișează:
<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>
Știu că $post->post_excerpt
este apelat în codul de mai sus, dar nu sunt sigur cu ce să-l înlocuiesc pentru a obține atributul alt al imaginii.

Am făcut recent unele cercetări pentru un proiect al unui client, așa că, iată și iată, pot să le folosesc aici!
După text, veți vedea o listă categorizată cu cele mai multe (toate?) funcțiile de manipulare a imaginilor din WordPress 3.0.1 (le-am grupat într-o anumită ordine, dar nu puneți prea multă credință în categorizarea mea.)
Oricum, răspunzând la ceea ce (cred) că aveți nevoie în loc de ceea ce ați întrebat (bine, voi răspunde și la asta, la final), cred că aveți nevoie de funcția wp_get_attachment_image()
, care va returna un șir HTML conținând aceste atribute:
'src'
,'class'
,'alt'
și'title'
.
Funcții de Manipulare a Imaginilor în WordPress 3.0
Deci, iată funcțiile de manipulare a imaginilor din WordPress pentru referința dumneavoastră și a altora (săriți mai jos pentru răspunsul la întrebarea dumneavoastră exactă):
Suport Imagini/Thumbnails
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 )
Atașamente
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 )
Tipuri 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 = '')
Încărcări
Sistem de Fișiere
HTML
Manipulare Imagini la Nivel Scăzut:
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)
După cum am promis, textul 'alt'
al imaginii este stocat ca un șir în wp_postmeta
cu meta_key-ul '_wp_attachment_image_alt'
.
După cum probabil știți deja, îl puteți încărca cu un simplu get_post_meta()
, astfel:
$alt_text = get_post_meta($post->ID, '_wp_attachment_image_alt', true);

Ei bine, nu pot să nu mă simt puțin prost acum că ai spus-o. Am folosit wp_get_attachment_imgage()
înainte și am uitat complet de ea. Ai dreptate în ceea ce credeai că am nevoie de fapt. Mulțumesc pentru informații. Ai dreptate și în legătură cu locul în care este stocat meta-ul alt...am căutat exact acolo, dar mi-a scăpat chiar dacă probabil m-am uitat fix la el. Asta se întâmplă când te apuci de treabă la sfârșitul zilei. Mulțumesc din nou!

Hei, nicio problemă. Am pus și eu niște întrebări foarte evidente recent pe lista de hackeri, doar ca răspunsul să fie evident imediat ce cineva l-a menționat. E ușor să ratezi ceva aici sau acolo. Dar beneficiul real al WordPress Answers este că fiecare întrebare și răspuns devine o resursă pentru alții cu întrebări similare în viitor. Mă aștept chiar ca voi căuta pe Google lucruri la care am răspuns dar pe care le voi uita în viitor!

Întrebare rapidă: ai indicat că wp_get_attachment_image()
returnează un array cu src-ul imaginii și atributele. Se pare că returnează doar HTML care conține imaginea și atributele ei. Încă își face treaba, doar nu știam dacă erai conștient de ceva care nu este în referința funcției: http://codex.wordpress.org/Function_Reference/wp_get_attachment_image

@kevtrout: (roșu la față) - Aveți dreptate, domnule. De data aceasta pe StackExchange am citit doar codul și am scris asta fără să-l testez. Voi actualiza răspunsul mai târziu după ce îmi îndeplinesc obligațiile față de clienți.

@Mike - Doar o mică reamintire să actualizezi nota despre wp_get_attachment_image ca un array - asta m-a cam nedumerit :). Altfel, răspuns excelent!

Luați în considerare să examinați funcția wp_prepare_attachment_for_js( $attachment )
, unde $attachment
este obiectul WP_Post al atașamentului în sine.
Aceasta este un pic o funcție "de toate pentru toate", dar oferă un hash foarte util cu o mulțime de metadate, inclusiv '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,
);
Această funcție este utilă în mod special (așa cum sugerează și numele) pentru trimiterea metadatelor imaginii atașament către o vizualizare wp.media prin wp_send_ajax()
, dar asta nu înseamnă că nu o puteți folosi și în alte scopuri.
Îmi place să abstractizez accesul la câmpul de meta _wp_attachment_image_alt
, în cazul în care metoda de obținere a textului alternativ se va schimba vreodată (puțin probabil, dar posibil).
Consider totuși că ar fi cazul pentru o metodă dedicată wp_get_attachment_image_alt()
.

Răspunsul lui Mike este corect, desigur, dar $alt_text = get_post_meta($post->ID, '_wp_attachment_image_alt', true);
poate returna un șir gol.
wp_get_attachment_image, totuși, întotdeauna obține un alt_text.
Echipa WordPress aplică următorul truc: mai întâi verifică post_excerpt, apoi obține titlul.
if(empty($alt_text)) // Dacă nu, folosește Caption-ul
{
$attachment = get_post($post->ID);
$alt_text = trim(strip_tags( $attachment->post_excerpt ));
}
if(empty($alt_text)) // În final, folosește titlul
{
$attachment = get_post($post->ID);
$alt_text = trim(strip_tags( $attachment->post_title ));
}

Am aflat că textul alternativ (Alt) pentru atașamente este stocat într-un meta personalizat numit "_wp_attachment_image_alt".
Deci, având ID-ul atașamentului, am putut obține textul alternativ cu acest cod:
<?php echo get_post_meta($attachment_id, '_wp_attachment_image_alt', true) ?>

Pentru a completa răspunsul lui Mike, cineva ar putea găsi acest lucru util. Poate fi necesar să obțineți ID-ul specific al atașamentului, astfel încât puteți face acest lucru prin transmiterea ID-ului Postului către get_post_thumbnail_id
exemplu:
$the_img = wp_get_attachment_image( get_post_thumbnail_id( get_the_ID() ) );

Dacă utilizați WP_Customize_Media_Control(), funcția get_theme_mod() va returna ID-ul postului, dar dacă utilizați noul WP_Customize_Image_Control(), get_theme_mod() va returna URL-ul imaginii. Așa am reușit să obțin textul alternativ folosind WP_Customize_Image_Control().
Iată cum am reușit să fac acest lucru. Sper că ajută pe cineva.
// Aceasta obține imaginea / URL-ul
$feature1 = get_theme_mod('feature_image_1');
// Aceasta obține ID-ul postului
$feature1_id = attachment_url_to_postid($feature1);
// Aceasta obține textul alternativ al imaginii setat în zona 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>
