Como recuperar o texto alternativo de um anexo de imagem?


32

Estou usando um arquivo attachment.php para mostrar grandes versões de imagens que foram clicadas em outro lugar. Gostaria de puxar o texto alternativo da imagem como legenda sob a imagem com javascript, mas o texto alternativo não é incluído quando é usado o wp_get_attachment_image_src (). Não acho que o WP tenha uma função para recuperá-lo, então preciso do meu. Para escrever essa função, preciso saber ... Onde está armazenado o texto alternativo de uma imagem?

Minha página de anexo usa wp_get_attachment_image_src(), o que não inclui o texto 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>

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_excerptcódigo está sendo chamado no código acima, mas não sei com o que substituí-lo para obter o atributo alt da imagem.

Respostas:


53

Recentemente, fiz uma pesquisa para um projeto de cliente recentemente, então eis que posso usá-lo 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 (agrupei-as em alguma ordem, mas não coloque muita credibilidade na minha categorização).

Enfim, respondendo o que (eu acho) você precisa, em vez do que você pediu ( ok, eu responderei também, no final ) Eu acho que o que você precisa é owp_get_attachment_image() função que retornará uma string HTML contendo esses atributos:

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

Funções de manipulação de imagem do WordPress 3.0

Então, aqui estão as funções de manipulação de imagem do WordPress para referência sua e de outros ( pule abaixo para obter a resposta para sua pergunta exata) ):

Suporte de imagem / miniaturas

Anexo

Tipos MIME

Uploads

Sistema de arquivo

HTML

Tratamento de imagem de baixo nível:


Conforme prometido, o texto da Imagem 'alt'é armazenado como uma string emwp_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);


1
Bem, não posso deixar de me sentir um pouco tonto agora que você disse isso. Eu usei wp_get_attachment_imgage()antes e esqueci completamente. Você está certo sobre o que eu pensei que realmente precisava. Obrigado pela informação. Você também está certo sobre onde o metad alt está armazenado ... Eu olhei naquele mesmo lugar, mas ele me escapou, mesmo que eu devesse estar olhando fixamente para ele. É o que eu ganho por entrar no final do dia. Obrigado novamente!
Kevtrout 31/08/10

Ei, sem problemas. Também fiz algumas perguntas óbvias no passado recente na lista de hackers, apenas para que a resposta seja claramente óbvia assim que alguém a mencionar. É fácil perder algo aqui ou ali. Mas o benefício real do WordPress Answers é que todas as perguntas e respostas se tornam um recurso para outras pessoas com perguntas semelhantes no futuro. Eu até espero que eu procure no Google a coisa que respondi, mas esqueci em alguns pontos no futuro!
MikeSchinkel

1
Pergunta rápida: você indicou que wp_get_attachment_image()retorna uma matriz da imagem src e atributos. Parece retornar apenas html contendo a imagem e seus atributos. Ainda faz o trabalho, só não sei se você estava ciente de algo não sobre a função ref: codex.wordpress.org/Function_Reference/wp_get_attachment_image
kevtrout

1
@ Mike - Apenas um lembrete rápido para atualizar a nota sobre wp_get_attachment_image como uma matriz - que me surpreendeu um pouco :). Excelente resposta caso contrário!
11137 Jonathan Wold

1
Resposta muito detalhada, muito bem!
Bas van Dijk

5

Considere examinar wp_prepare_attachment_for_js( $attachment )onde $attachmentestá o objeto WP_Post do próprio anexo.

Essa é uma função da "pia da cozinha", mas fornece um hash muito bom 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 do anexo para uma wp.media View via wp_send_ajax(), mas isso não significa que você não possa usá-la para outros fins.

Gosto de abstrair do _wp_attachment_image_altcampo meta post, caso o método para recuperar o texto alternativo mude (improvável, mas concebível).

Eu sinto que há um argumento para um wp_get_attachment_image_alt()método, no entanto.


Exatamente o que eu estava procurando. Alguém tem uma ideia do seu desempenho? Com tantos valores diferentes ele recupera ... Eu me pergunto ...
Larzan

@Larzan eu não me preocupar com o desempenho - a menos que você está recebendo centenas de dados de imagens, ao mesmo tempo ...
Tom Auger

4

A resposta de Mike 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 recebe um alt_text.

A equipe do Wordpress aplica o seguinte truque, primeiro, verificando o post_except e 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 )); 
}

2

Descobri que o texto Alt para anexos era armazenado em uma meta personalizada chamada "_wp_attachment_image_alt"

Portanto, tendo o ID do anexo, consegui obter o texto alternativo com este código:

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

0

Se você estiver usando WP_Customize_Media_Control (), seu get_theme_mod () retornará o ID da postagem, mas se você estiver usando o novo WP_Customize_Image_Control (), o get_theme_mod () retornará a URL da imagem, foi assim que consegui obter o texto alternativo usando o WP_Customize_Image_Control ()

Aqui está como eu fui capaz de fazê-lo. 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 );

Marcação

<a href="<?php echo $feature1_url; ?>"><img class="img-responsive center-block" src="<?php echo $feature1; ?>" alt="<?php echo $image1_alt; ?>"></a>

0

Para adicionar à resposta de Mike, alguém pode achar isso útil. Pode ser necessário obter o ID específico do anexo, para isso, passando o ID da postagem para o get_post_thumbnail_idexemplo:

  $the_img = wp_get_attachment_image( get_post_thumbnail_id( get_the_ID() ) );
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.