Bagaimana cara mendapatkan atribut title / alt gambar?

17

Dalam tema putih saya, tidak ada atribut alt yang dikonfigurasi untuk posting slider rumah. Saya menambahkan teks alt untuk gambar melalui antarmuka perpustakaan media. Saya menambahkan kode berikut untuk menampilkan teks alt / atribut. Tetapi tidak muncul:

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

Ini kodenya:

<?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 .'" />';
  }
?>
Nisha_at_Behance
sumber
1
Anda mencoba mendapatkan meta pos $attachment->IDtetapi saya tidak dapat melihat info tentang $attachmentobjek dalam kode Anda.
cybmeta
@cybmeta saya sudah mendapat potongan kode ini dari sini wordpress.stackexchange.com/questions/185396/…
Nisha_at_Behance

Jawaban:

16

Datang ke sini karena pos ini adalah salah satu hit teratas di mesin pencari ketika mencari alt dan judul gambar WordPress. Menjadi agak terkejut bahwa tidak ada jawaban yang tampaknya memberikan solusi sederhana yang cocok dengan judul pertanyaan saya akan meninggalkan apa yang saya dapatkan pada akhirnya berharap ini membantu pembaca masa depan.

// 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);

Sebagai bonus, inilah cara mengambil src gambar. Dengan atribut di atas itu saja yang kita butuhkan untuk membangun markup gambar statis.

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

$image_src = wp_get_attachment_image_src($image_id, $size)[0];
leymannx
sumber
Saya tidak mendapatkan perbedaan dalam jawaban Anda dan yang lainnya. Masalah dalam pertanyaan adalah bahwa ID lampiran tidak benar, dan itulah jawabannya. Selain itu, dalam jawaban Anda, Anda mendapatkan ID untuk gambar mini posting saat ini, tetapi tidak untuk lampiran yang diinginkan. jadi itu tidak menjawab / memecahkan pertanyaan OP.
cybmeta
Di mana Anda mendapatkan ID gambar Anda, terserah Anda. Tapi terima kasih untuk downvote. Terutama baik dari Anda untuk menempelkan jawaban saya ke Anda.
leymannx
25

Masalah Anda adalah Anda tidak memberikan ID lampiran get_post_meta()dan get_the_title()fungsi yang benar.

Ini adalah kode Anda untuk mendapatkan altgambar:

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

Dan itu benar, tetapi $attachment->IDtidak didefinisikan dalam kode Anda, jadi, fungsinya tidak mengembalikan apa pun.

Membaca kode Anda, tampaknya Anda menyimpan ID gambar sebagai bidang meta dan kemudian Anda mendapatkannya dengan kode ini:

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

Jadi, anggap itu $image->idbenar dalam kode Anda, Anda harus mengganti ini:

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

Dengan:

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

Itu untuk mendapatkan alt, untuk mendapatkan gelar:

 $image_title = get_the_title( $image->id );
cybmeta
sumber
4

Saya menggunakan fungsi cepat di semua tema saya untuk mendapatkan data lampiran gambar:

//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
        );
    }
}

Semoga ini membantu!

Dario Zadro
sumber
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 . '" />';

}

harap dicatat bahwa saya tidak menguji Anda $image->id, hanya berasumsi bahwa Anda memiliki ID lampiran yang tepat. Sisanya berasal $img_meta. Jika alt hilang, kami menggunakan judul gambar, jika judul tidak ada, Anda akan melihat teks "Judul hilang" untuk mendorong Anda untuk mengisinya.

Benn
sumber
2

Ok saya menemukan jawaban bahwa tidak ada seorang pun di internet saya sudah mencari hari sekarang. Tetap milik saya ini hanya berfungsi jika tema atau plugin Anda menggunakan WP_Customize_Image_Control () jika Anda menggunakan WP_Customize_Media_Control () get_theme_mod () akan mengembalikan ID dan bukan url.

Untuk solusi saya, saya menggunakan versi yang lebih baru WP_Customize_Image_Control ()

Banyak posting di forum memiliki get_attachment_id () yang tidak berfungsi lagi. Saya menggunakan attachment_url_to_postid ()

Inilah cara saya dapat melakukannya. Semoga ini bisa membantu seseorang di luar sana

// 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>
DevTurtle
sumber