Eu estou usando um arquivo attachment.php para mostrar grandes versões de imagens que foram clicadas em outro lugar. Eu gostaria de puxar o texto alt da imagem como uma legenda sob a imagem com javascript, mas o texto alt não é incluído quando wp_get_attachment_image_src () é usado. Eu não acho que o WP tenha uma função para recuperá-lo, então eu preciso do meu próprio. Para escrever essa função eu preciso saber ... Onde o texto alternativo de uma imagem é armazenado?
Minha página de anexo usa wp_get_attachment_image_src()
, que não inclui o texto 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>
Isso 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>
Estou ciente de que o $post->post_excerpt
está sendo chamado no código acima, mas não tenho certeza com o que substituí-lo para obter o atributo alt da imagem.
Eu recentemente fiz algumas pesquisas para um projeto de cliente recentemente então e-e-ver-eueu uso aqui!
Após o texto, você verá uma lista categorizada da maioria (todas?) Das funções de manipulação de imagens do WordPress 3.0.1 (eu as agrupei em alguma aparência de ordem, mas não coloquei muita credibilidade na minha categorização).
De qualquer forma,respondendo o que (eu acho) você precisa ao invés do que você pediu(ok, eu vou responder também, no final) eu acho que o que você precisa é a função wp_get_attachment_image()
que retornará uma string HTML contendo estes atributos:
'src'
,'class'
,'alt'
e'title'
.Então, aqui estão as funções de manipulação de imagens do WordPress para a sua referência e outras (salte abaixo para a resposta à sua pergunta exata):
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 )
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 )
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 = '')
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)
Como prometido, o Image's 'alt'
text é armazenado como uma string em wp_postmeta
com o meta_key de '_wp_attachment_image_alt'
.
Como você provavelmente já sabe, você pode carregá-lo com um simples get_post_meta()
assim:
$alt_text = get_post_meta($post->ID, '_wp_attachment_image_alt', true);
Considere olhar para wp_prepare_attachment_for_js( $attachment )
, onde $attachment
é o objeto WP_Post do próprio anexo.
Esta é uma função de "pia da cozinha", mas fornece um hash muito agradável com uma tonelada de metadados, incluindo '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,
);
Isso é particularmente útil (como o nome indica), para enviar a meta da imagem de anexo para uma Visualização wp.media via wp_send_ajax()
, mas isso não significa que você não possa usá-la para outros propósitos.
Eu gosto de abstrair do _wp_attachment_image_alt
post meta field, caso o método para recuperar o texto alt mude (improvável, mas concebível).
Eu sinto que há um caso para um método wp_get_attachment_image_alt()
no entanto.
Mike resposta está correta, é claro, mas $alt_text = get_post_meta($post->ID, '_wp_attachment_image_alt', true);
pode retornar uma string vazia.
wp_get_attachment_image , no entanto, sempre obtém um alt_text.
A equipe do Wordpress aplica o seguinte truque, primeiro, checando o post_except, depois obtendo o título.
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 ));
}
Descobri que o texto Alt para anexos era armazenado em uma meta personalizada chamada "_wp_attachment_image_alt"
Assim, tendo o ID do anexo, consegui obter o texto alt com este código:
<?php echo get_post_meta($attachment_id, '_wp_attachment_image_alt', true) ?>
Se você estiver usando WP_Customize_Media_Control (), seu get_theme_mod () retornará o id do post, mas se você estiver usando o novo WP_Customize_Image_Control (), o get_theme_mod () retornará o URL da imagem, assim consegui usar o texto alt do WP_Customize_Image_Control. ()
Aqui está como eu consegui fazer isso. Espero que isto seja útil a alguém
// 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>
Para adicionar à resposta de Mike, alguém pode achar isso útil. Pode ser necessário obter o ID específico do anexo, para que você possa fazer isso passando o ID da postagem para o exemplo get_post_thumbnail_id
:
$the_img = wp_get_attachment_image( get_post_thumbnail_id( get_the_ID() ) );