Resim Ekinin Alt Metni Nasıl Alınır?


32

Başka bir yere tıklanan görüntülerin büyük versiyonlarını göstermek için attachment.php dosyasını kullanıyorum. Resmin alt metnini javascript ile resmin altına resim yazısı olarak çekmek istiyorum, ancak wp_get_attachment_image_src () kullanıldığında alt metin dahil edilmez. WP'nin onu almak için bir işlevi olmadığını düşünüyorum, bu yüzden kendime ihtiyacım var. Bu işlevi yazmak için bilmem gerekenler ... Bir görüntünün alt metni nerede saklanır?

Ek sayfam wp_get_attachment_image_src(), alt metni içermeyen kullanır .

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

Bu gösterir ki:

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

$post->post_excerptYukarıdaki kodda çağrıldığının farkındayım , ancak görüntünün alt özelliğini almak için neyle değiştirileceğinden emin değilim.

Yanıtlar:


53

Geçenlerde son zamanlarda bir istemci projesi için biraz araştırma yaptım bu yüzden lo-ve-Hani ben burada kullanmak olsun!

Metinden sonra, WordPress 3.0.1 içinden görüntü işleme işlevlerinin çoğunun (tümü?) Kategorize edilmiş bir listesini göreceksiniz (Bunları bir miktar düzende gruplandırdım, ancak kategorizasyonumda çok fazla güvende olma.)

Her neyse, istediğinizi yerine neye ihtiyacınız olduğunu (sanırım) cevaplama ( tamam, bunu da cevaplayacağım ) Sonunda ihtiyacınız olan şey, wp_get_attachment_image()bu nitelikleri içeren bir HTML dizgisini döndüren işlevdir.

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

WordPress 3.0 Görüntü İşleme İşlevleri

Öyleyse, sizin ve diğerlerinin referansı için WordPress'in görüntü işleme işlevleri şunlardır ( sorunuzun cevabını bulmak için aşağıya atlayın ):

Görüntü Desteği / Küçük Resimler

Ek dosya

MIME Türleri

Yüklemeler

Dosya sistemi

HTML

Düşük Seviyeli Görüntü İşleme:


Söz verildiği gibi, Resmin 'alt'metni wp_postmetameta_key ile birlikte bir dize olarak saklanır'_wp_attachment_image_alt' .

Muhtemelen zaten bildiğiniz get_post_meta()gibi basit bir şekilde yükleyebilirsiniz :

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


1
Şey, söyleyemem ama şimdi biraz aptalca hissetmesine yardım edemem. Daha önce kullandım wp_get_attachment_imgage()ve tamamen unuttum. Gerçekten ihtiyacım olduğunu düşündüğüm şey konusunda haklısın. Bilgi için teşekkürler. Ayrıca alt meta'nın nerede depolandığı konusunda da haklısın ... O yere baktım, ama tam ona bakmış olmama rağmen beni kaçırdı. Günün sonunda girdiğim şey bu. Tekrar teşekkürler!
kevtrout

Hey, sorun değil. Son zamanlarda bazı hakikaten bazı sorular sordum, hackerlar listesinde sadece cevabın birisinin söylediği en kısa zamanda açık bir şekilde anlaşılır olması için. Burada ya da oradaki bir şeyi özlemek kolaydır. Ancak WordPress Cevaplarının asıl yararı her soru ve cevabı gelecekte benzer soruları olan başkaları için bir kaynak haline geliyor. Hatta cevap verdiğim, ancak gelecekteki noktalarda unutmuş olduğum bir şeyi gozleyeceğimi umuyorum!
MikeSchinkel

1
Hızlı soru: wp_get_attachment_image()Resmin src ve niteliklerinin bir dizisini döndürdüğünü belirtmiştiniz . Yalnızca görüntüyü içeren html ve özniteliklerini döndürüyor gibi görünüyor. Yine de iş yapıyor, sadece ref işlevinde olmayan bir şeyin farkında olup olmadığınızı bilmiyordum: codex.wordpress.org/Function_Reference/wp_get_attachment_image
kevtrout

1
@Mike - wp_get_attachment_image ile ilgili notu bir dizi olarak güncellemek için kısa bir hatırlatma - bu beni biraz şaşırttı :). Aksi takdirde mükemmel cevap!
Jonathan Wold

1
Çok ayrıntılı cevap, aferin!
Bas van Dijk

5

Eklentinin WP_Post nesnesinin wp_prepare_attachment_for_js( $attachment )nerede $attachmentolduğunu göz önünde bulundurun .

Bu, bir "mutfak lavabosu" işlevinin bir parçasıdır, ancak 'alt' dahil bir ton meta veri ile çok güzel bir karmaşa sağlar:

$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,
    );

Bu özellikle (adından da anlaşılacağı gibi), ek görüntüsünü meta wp.media View'a göndermek için kullanışlıdır wp_send_ajax(), ancak bu başka amaçlarla kullanamayacağınız anlamına gelmez.

_wp_attachment_image_altAlt metni alma yönteminin hiç değişmemesi durumunda (olası değil, akla gelebilecek) , post meta alanından soyutlamayı seviyorum .

wp_get_attachment_image_alt()Bununla birlikte , bir yöntem için bir durum olduğunu hissediyorum .


Tam olarak aradığım şeydi. Performansı hakkında fikri olan var mı? O kadar çok farklı değerlerle elde ediyor ki ... Merak ediyorum ...
Larzan

@Larzan Performans hakkında endişelenmem - aynı anda yüzlerce görüntü verisi almadığınız sürece ...
Tom Auger

4

Mike'ın cevabı elbette doğrudur, ancak $alt_text = get_post_meta($post->ID, '_wp_attachment_image_alt', true);boş bir dize döndürebilir.

wp_get_attachment_image , ancak her zaman bir alt_text alır.

Wordpress ekibi ilk önce post_except'i kontrol ettikten sonra unvanı alarak aşağıdaki numarayı uygular.

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

Ekler için Alt metninin "_wp_attachment_image_alt" adlı özel bir metada depolandığını öğrendim.

Böylece, ekin kimliğini alarak alt metni şu kodla bulabildim:

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

0

WP_Customize_Media_Control () kullanıyorsanız, get_theme_mod (), post kimliğinizi döndürür, ancak yeni WP_Customize_Image_Control () kullanıyorsanız, get_theme_mod (), image url değerini döndürür. ()

İşte bunu yapabildim. Umarım bu orada birine yardım eder

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

Biçimlendirme

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

0

Mike'ın cevabına eklemek için birileri bunu yararlı bulabilir. Ekin belirli bir kimliğini almanız gerekebilir; bu nedenle, get_post_thumbnail_idörneğin posta kimliğini ileterek yapabilirsiniz :

  $the_img = wp_get_attachment_image( get_post_thumbnail_id( get_the_ID() ) );
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.