Resim başlığı / alt niteliği nasıl edinilir?


17

Beyaz temamda, ana kaydırma çubuğu yayını için yapılandırılmış bir alt özellik yok. Resmin alt metnini medya kütüphanesi arayüzünden ekledim. Alt metni / niteliği görüntülemek için aşağıdaki kodu ekledim. Ancak şunu göstermez:

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

İşte kod:

<?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
Yazı meta almaya çalışıyorsunuz $attachment->IDama $attachmentkodunuzda nesne hakkında herhangi bir bilgi göremiyorum .
cybmeta

@cybmeta Bu kod snippet'ini buradan aldım wordpress.stackexchange.com/questions/185396/…
Nisha_at_Behance

Ayrıca 1) wordpress.org/plugins/imageseo 2) wordpress.org/plugins/… 3) wordpress.org/plugins/auto-image-alt gibi eklentileri de kullanabilirsiniz. Umarım yardımcı olur!
James

Yanıtlar:


18

Bu yazı geldi, bu yazı WordPress resim alt ve başlığı ararken arama motorunda en iyi hit arasındadır. Cevapların hiçbirinin, sorunun başlığına uygun basit bir çözüm sunmadığına şaşırarak, sonunda okuyucumun gelecekteki okuyuculara yardımcı olmasını umduğum şeyi bırakacağım.

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

Bonus olarak bir görüntü src nasıl alınır. Yukarıdaki niteliklerle, statik bir görüntünün işaretlemesini oluşturmak için ihtiyacımız olan tek şey budur.

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

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

Cevabında ve diğerlerinde fark göremiyorum. Sorudaki sorun, ekin doğru olmamasıydı ve cevap buydu. Ayrıca, yanıtınızda, geçerli yayının küçük resminin kimliğini alırsınız, ancak istenen ekin adını alamazsınız. bu yüzden OP sorusunu cevaplamaz / çözmez.
cybmeta

Resim kimliğinizi nereden alacağınız size kalmış. Ama yine de düşüş için teşekkürler. Cevabımı sizinkine yapıştırmanız özellikle güzel.
leymannx

25

Sorununuz, doğru ekin kimliğini get_post_meta()ve get_the_title()işlevlerini vermemenizdir.

altGörüntüyü almak için kodunuz :

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

Ve doğrudur, ancak $attachment->IDkodunuzda tanımlanmamıştır, bu nedenle işlev hiçbir şey döndürmez.

Kodunuzu okuduğunuzda, görüntünün kimliğini meta alan olarak depoladığınız ve daha sonra bu kodla aldığınız anlaşılıyor:

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

Yani, $image->idkodunuzda doğru olduğunu varsayarak , bunu değiştirmeniz gerekir:

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

İle:

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

Bu altunvanı almak içindir:

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

4

Görüntü eki verilerini almak için tüm temalarımda hızlı bir işlev kullanıyorum:

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

Bu yardımcı olur umarım!


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

}

lütfen test etmediğimi $image->id, doğru ek kimliğine sahip olduğunuzu varsaydığımı unutmayın . Gerisi geliyor $img_meta. Alt eksikse resim başlığı kullanıyoruz, başlık eksikse doldurmanız için sizi itecek "Eksik başlık" metni göreceksiniz.


2

Tamam, şimdi günlerce aradığım internette kimsenin olmadığı cevabını buldum. Bu benim temasında sadece tema veya eklenti WP_Customize_Image_Control () kullanıyorsanız çalışır WP_Customize_Media_Control () ur_ değil get_theme_mod () kimliği döndürür.

Benim çözüm için daha yeni bir sürüm WP_Customize_Image_Control () kullanıyordum

Forumlardaki birçok yayın artık çalışmayan get_attachment_id () yöntemine sahiptir. Attachment_url_to_postid () kullandım

İşte bunu nasıl başardım. Umarım bu birisine yardımcı olur

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