Como obter o atributo alt / title da imagem?


17

No meu tema branco, não há nenhum atributo alt configurado para a postagem do controle deslizante inicial. Eu adicionei o texto alternativo para a imagem através da interface da biblioteca de mídia. Eu adicionei o código a seguir para exibir o texto alternativo / atributo. Mas não é exibido:

<img class="homepage-slider_image" src="http://www.blabla.com/wp-content/uploads/2013/06/cms-website4-1800x800.jpg" alt="" />

Aqui está o código:

<?php
  $image = get_post_meta(get_the_ID(), WPGRADE_PREFIX.'homepage_slide_image', true);
  if (!empty($image)) {
    $image = json_decode($image);
    $image_alt = get_post_meta( $attachment->ID, '_wp_attachment_image_alt', true);
    if ( empty( $image_alt )) {
      $image_alt = $attachment->post_title;
    }
    if ( empty( $image_alt )) {
      $image_alt = $attachment->post_excerpt;
    }
    $image_title = $attachment->post_title;
    $image_id = $image->id;
    $image = wp_get_attachment_image_src( $image_id, 'blog-huge', false);
    echo '<img class="homepage-slider_image" src="'.$image[0].'" alt="'. $image_alt .'" />';
  }
?>

1
Você está tentando obter a meta da postagem, $attachment->IDmas não consigo ver nenhuma informação sobre o $attachmentobjeto no seu código.
cybmeta

@cybmeta i tenho este trecho de código a partir daqui wordpress.stackexchange.com/questions/185396/...
Nisha_at_Behance

Respostas:


16

Veio aqui, pois este post está entre os principais hits do mecanismo de pesquisa ao procurar alt e título da imagem do WordPress. Surpreendendo-me bastante que nenhuma das respostas pareça fornecer uma solução simples que corresponda ao título da pergunta, deixarei de lado o que descobri no final, esperando que ajude futuros leitores.

// An attachment/image ID is all that's needed to retrieve its alt and title attributes.
$image_id = get_post_thumbnail_id();

$image_alt = get_post_meta($image_id, '_wp_attachment_image_alt', TRUE);

$image_title = get_the_title($image_id);

Como bônus, veja como recuperar uma imagem src. Com os atributos acima, é tudo o que precisamos para criar a marcação de uma imagem estática.

$size = 'my-size' // Defaults to 'thumbnail' if omitted.

$image_src = wp_get_attachment_image_src($image_id, $size)[0];

Eu não entendo a diferença na sua resposta e nas outras. O problema da pergunta era que o ID do anexo não estava correto e essa é a resposta. Além disso, na sua resposta, você obtém o ID da miniatura da postagem atual, mas não do anexo desejado. portanto, não responde / resolve a questão do OP.
22619 cybmeta

A escolha da sua ID de imagem depende de você. Mas obrigado pelo voto negativo de qualquer maneira. Especialmente gentil da sua parte colar minha resposta na sua.
Leymannx # 26/19

25

Seu problema é que você não está fornecendo o ID do anexo correto get_post_meta()e as get_the_title()funções.

Este é o seu código para obter alta imagem:

$image_alt = get_post_meta( $attachment->ID, '_wp_attachment_image_alt', true);

E está correto, mas $attachment->IDnão está definido no seu código, portanto, a função não retorna nada.

Lendo seu código, parece que você armazena o ID da imagem como um meta-campo e o obtém com este código:

$image = get_post_meta(get_the_ID(), WPGRADE_PREFIX.'homepage_slide_image', true);

Portanto, supondo que $image->idesteja correto no seu código, você deve substituir isso:

$image_alt = get_post_meta( $attachment->ID, '_wp_attachment_image_alt', true);

Com:

$image_alt = get_post_meta( $image->id, '_wp_attachment_image_alt', true);

Isso é para obter o alt, para obter o título:

 $image_title = get_the_title( $image->id );

4

Uso uma função rápida em todos os meus temas para obter dados de anexo de imagem:

//get attachment meta
if ( !function_exists('wp_get_attachment') ) {
    function wp_get_attachment( $attachment_id )
    {
        $attachment = get_post( $attachment_id );
        return array(
            'alt' => get_post_meta( $attachment->ID, '_wp_attachment_image_alt', true ),
            'caption' => $attachment->post_excerpt,
            'description' => $attachment->post_content,
            'href' => get_permalink( $attachment->ID ),
            'src' => $attachment->guid,
            'title' => $attachment->post_title
        );
    }
}

Espero que isto ajude!


2
$image = get_post_meta(get_the_ID(), WPGRADE_PREFIX . 'homepage_slide_image', true);
if (!empty($image)) {
    $image          = json_decode($image);
    $image_id       = $image->id;
    $img_meta       = wp_prepare_attachment_for_js($image_id);
    $image_title    = $img_meta['title'] == '' ? esc_html_e('Missing title','{domain}') : $img_meta['title'];
    $image_alt      = $img_meta['alt'] == '' ? $image_title : $img_meta['alt'];
    $image_src      = wp_get_attachment_image_src($image_id, 'blog-huge', false);

    echo '<img class="homepage-slider_image" src="' . $image_src[0] . '" alt="' . $image_alt . '" />';

}

observe que eu não testei o seu $image->id, apenas assumi que você tem o ID de anexo correto. O resto vem $img_meta. Se faltar alt, estamos usando o título da imagem; se o título estiver faltando, você verá o texto "Faltando título" para sugerir que você o preencha.


2

Ok, eu encontrei a resposta que ninguém tem na rede que eu estava procurando há dias agora. Lembre-se de que isso só funciona se o seu tema ou plug-in estiver usando o WP_Customize_Image_Control () se você estiver usando WP_Customize_Media_Control (), o get_theme_mod () retornará o ID e não o URL.

Para minha solução, eu estava usando a versão mais recente WP_Customize_Image_Control ()

Muitas postagens nos fóruns têm o get_attachment_id (), que não funciona mais. Eu usei attachment_url_to_postid ()

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>
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.