Bagaimana Cara Mengambil Teks Alt Lampiran Gambar?

32

Saya menggunakan file attachment.php untuk menampilkan versi besar dari gambar yang telah diklik di tempat lain. Saya ingin menarik teks alt gambar sebagai teks di bawah gambar dengan javascript, tetapi teks alt tidak disertakan ketika ketika wp_get_attachment_image_src () digunakan. Saya tidak berpikir WP memiliki fungsi untuk mengambilnya, jadi saya perlu sendiri. Untuk menulis fungsi itu, saya perlu tahu ... Di mana teks alt untuk gambar disimpan?

Halaman lampiran saya menggunakan wp_get_attachment_image_src(), yang tidak termasuk teks 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>

Pertunjukan ini:

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

Saya sadar bahwa $post->post_excerptsedang dipanggil dalam kode di atas, tetapi saya tidak yakin harus menggantinya dengan apa untuk mendapatkan atribut alt gambar.

kevtrout
sumber

Jawaban:

53

Saya baru-baru ini melakukan riset untuk proyek klien baru-baru ini, jadi lihatlah, saya bisa menggunakannya di sini!

Setelah teks Anda akan melihat daftar sebagian besar (semua?) Dari fungsi penanganan gambar dari dalam WordPress 3.0.1 (Saya mengelompokkannya dalam beberapa urutan urutan tetapi jangan terlalu percaya pada kategorisasi saya.)

Bagaimanapun, menjawab apa yang (saya pikir) Anda butuhkan alih-alih apa yang Anda minta ( oke, saya akan menjawabnya juga, pada akhirnya ) Saya pikir apa yang Anda butuhkan adalahwp_get_attachment_image() fungsi yang akan mengembalikan string HTML yang berisi atribut-atribut ini:

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

Fungsi Penanganan Gambar WordPress 3.0

Jadi di sini adalah fungsi penanganan gambar WordPress untuk referensi Anda dan orang lain ( lompat ke bawah untuk jawaban atas pertanyaan persis Anda ):

Dukungan Gambar / Gambar Kecil

Lampiran

Jenis MIME

Unggah

Berkas sistem

HTML

Penanganan Gambar Tingkat Rendah:


Seperti dijanjikan teks gambar 'alt'disimpan sebagai string wp_postmetadengan meta_key of'_wp_attachment_image_alt' .

Seperti yang mungkin sudah Anda ketahui, Anda dapat memuatnya dengan sederhana get_post_meta()seperti:

$alt_text = get_post_meta($post->ID, '_wp_attachment_image_alt', true);

MikeSchinkel
sumber
1
Yah, mau tak mau aku merasa sedikit tolol karena kau sudah mengatakannya. Saya telah menggunakan wp_get_attachment_imgage()sebelumnya dan benar-benar lupa. Anda benar tentang apa yang saya pikir Anda butuhkan. Terimakasih atas infonya. Anda juga benar tentang di mana alt meta disimpan ... Saya melihat di tempat itu, tetapi itu menghindarkan saya meskipun saya pasti telah menatapnya. Itulah yang saya dapatkan pada akhir hari. Terima kasih lagi!
kevtrout
Hei, tidak masalah. Saya telah mengajukan beberapa pertanyaan yang sangat jelas di masa lalu juga di daftar peretas hanya untuk memiliki jawabannya menjadi sangat jelas segera setelah seseorang menyebutkannya. Sangat mudah untuk melewatkan sesuatu di sini atau di sana. Tetapi manfaat nyata dari Jawaban WordPress adalah setiap pertanyaan dan jawaban menjadi sumber bagi orang lain dengan pertanyaan serupa di masa depan. Saya bahkan berharap saya akan google hal yang saya jawab tetapi lupa pada poin di masa depan!
MikeSchinkel
1
Pertanyaan cepat: Anda menunjukkan bahwa wp_get_attachment_image()mengembalikan array dari src gambar dan atribut. Tampaknya hanya mengembalikan html yang berisi gambar dan atributnya. Masih melakukan pekerjaan, hanya tidak tahu apakah Anda mengetahui sesuatu yang tidak ada di fungsi ref: codex.wordpress.org/Function_Reference/wp_get_attachment_image
kevtrout
1
@ Mike - Hanya pengingat cepat untuk memperbarui catatan tentang wp_get_attachment_image sebagai array - yang sedikit membuat saya bingung :). Jawaban luar biasa!
Jonathan Wold
1
Jawaban yang sangat terperinci, bagus sekali!
Bas van Dijk
5

Pertimbangkan melihat wp_prepare_attachment_for_js( $attachment ), di mana$attachment objek WP_Post dari lampiran itu sendiri.

Ini sedikit fungsi "kitchen sink", tetapi memang memberikan hash yang sangat bagus dengan satu ton metadata, termasuk '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,
    );

Ini sangat berguna (seperti namanya), untuk mengirim meta gambar lampiran ke wp.media View via wp_send_ajax() , tetapi itu tidak berarti Anda tidak dapat menggunakannya untuk tujuan lain.

Saya suka abstrak jauh dari _wp_attachment_image_alt bidang meta pos, kalau-kalau metode untuk mengambil teks alt pernah berubah (tidak mungkin, tetapi bisa dibayangkan).

Saya merasa bahwa ada kasus untuk suatu wp_get_attachment_image_alt()metode.

Tom Auger
sumber
Persis apa yang saya cari. Adakah yang tahu tentang kinerjanya? Dengan begitu banyak nilai yang berbeda yang
diambilnya
@Larzan Saya tidak akan khawatir tentang kinerja - kecuali jika Anda mendapatkan ratusan data gambar pada saat yang sama ...
Tom Auger
4

Jawaban Mike benar, tentu saja, tetapi $alt_text = get_post_meta($post->ID, '_wp_attachment_image_alt', true);dapat mengembalikan string kosong.

wp_get_attachment_image , bagaimanapun, selalu mendapatkan alt_text.

Tim Wordpress menerapkan trik berikut, pertama, memeriksa post_except, lalu mendapatkan judul.

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 )); 
}
GUI Junkie
sumber
2

Saya menemukan bahwa teks Alt untuk lampiran disimpan pada meta khusus yang disebut "_wp_attachment_image_alt"

Jadi memiliki ID lampiran, saya bisa mendapatkan teks alt dengan kode ini:

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

Jika Anda menggunakan WP_Customize_Media_Control () get_theme_mod () Anda akan mengembalikan id posting tetapi jika Anda menggunakan WP_Customize_Image_Control () get_theme_mod () akan mengembalikan url gambar ini adalah bagaimana saya bisa mendapatkan alt teks dari menggunakan WP_Customize_mage_mage_mage_mage_mage_mod_mage ()

Inilah cara saya bisa 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
0

Untuk menambah jawaban Mike, seseorang mungkin menganggap ini berguna. Anda mungkin perlu mendapatkan ID spesifik dari lampiran, sehingga Anda dapat melakukannya dengan mengirimkan ID Posting sebagai get_post_thumbnail_idcontoh:

  $the_img = wp_get_attachment_image( get_post_thumbnail_id( get_the_ID() ) );
Victor Uria
sumber