Làm thế nào để có được tiêu đề hình ảnh / thuộc tính alt?


17

Trong chủ đề màu trắng của tôi, không có thuộc tính alt được cấu hình cho bài đăng thanh trượt nhà. Tôi đã thêm văn bản thay thế cho hình ảnh thông qua giao diện thư viện phương tiện. Tôi đã thêm đoạn mã sau để hiển thị văn bản / thuộc tính alt. Nhưng nó không hiển thị:

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

Đây là mã:

<?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
Bạn đang cố gắng để có được meta bài đăng $attachment->IDnhưng tôi không thể thấy bất kỳ thông tin nào về $attachmentđối tượng trong mã của bạn.
cybmeta

@cybmeta Tôi đã nhận được đoạn mã này từ đây wordpress.stackexchange.com/questions/185394/ chủ
Nisha_at_Behance

Câu trả lời:


16

Đến đây vì bài đăng này là một trong những lượt truy cập hàng đầu trên công cụ tìm kiếm khi tìm kiếm alt và tiêu đề hình ảnh WordPress. Khá ngạc nhiên khi không có câu trả lời nào có vẻ cung cấp một giải pháp đơn giản phù hợp với tiêu đề của câu hỏi Tôi sẽ bỏ đi những gì tôi nghĩ ra cuối cùng với hy vọng nó sẽ giúp ích cho những độc giả tương lai.

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

Như một phần thưởng ở đây làm thế nào để lấy một src hình ảnh. Với các thuộc tính trên đó là tất cả những gì chúng ta cần để xây dựng đánh dấu hình ảnh tĩnh.

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

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

Tôi không nhận được sự khác biệt trong câu trả lời của bạn và những người khác. Vấn đề trong câu hỏi là ID đính kèm không chính xác và đó là câu trả lời. Ngoài ra, trong câu trả lời của bạn, bạn nhận được ID cho hình thu nhỏ của bài đăng hiện tại, nhưng không phải cho tệp đính kèm mong muốn. vì vậy nó không trả lời / giải quyết câu hỏi của OP.
cybmeta

Nơi bạn nhận được ID hình ảnh của bạn là tùy thuộc vào bạn. Nhưng cảm ơn cho các downvote dù sao. Đặc biệt tốt đẹp của bạn để dán câu trả lời của tôi vào của bạn.
leymannx

25

Vấn đề của bạn là bạn không cung cấp ID get_post_meta()và tệp đính kèm chính xác get_the_title().

Đây là mã của bạn để có được althình ảnh:

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

Và nó là chính xác, nhưng $attachment->IDkhông được xác định trong mã của bạn, vì vậy, hàm không trả về bất cứ điều gì.

Đọc mã của bạn, có vẻ như bạn lưu trữ ID của hình ảnh dưới dạng trường meta và sau đó bạn nhận được mã này với mã này:

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

Vì vậy, giả sử đó $image->idlà chính xác trong mã của bạn, bạn nên thay thế điều này:

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

Với:

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

Đó là để có được alt, để có được tiêu đề:

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

4

Tôi sử dụng chức năng nhanh trong tất cả các chủ đề của mình để nhận dữ liệu đính kèm hình ảnh:

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

Hi vọng điêu nay co ich!


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

}

xin lưu ý rằng tôi đã không kiểm tra của bạn $image->id, chỉ cho rằng bạn có ID đính kèm phù hợp. Phần còn lại đến từ $img_meta. Nếu alt bị thiếu, chúng tôi đang sử dụng tiêu đề hình ảnh, nếu tiêu đề bị thiếu, bạn sẽ thấy văn bản "Thiếu tiêu đề" để đưa bạn vào để điền vào.


2

Ok tôi đã tìm thấy câu trả lời mà không ai có trên mạng mà tôi đang tìm kiếm nhiều ngày nay. Giữ cho tôi cái này chỉ hoạt động nếu chủ đề hoặc plugin của bạn đang sử dụng WP_Customize_Image_Control () nếu bạn đang sử dụng WP_Customize_Media_Control () thì get_theme_mod () sẽ trả về ID chứ không phải url.

Đối với giải pháp của tôi, tôi đã sử dụng phiên bản mới hơn WP_Customize_Image_Control ()

Rất nhiều bài đăng trên các diễn đàn có get_attachment_id () không hoạt động nữa. Tôi đã sử dụng tệp đính kèm_url_to_postid ()

Đây là cách tôi có thể làm điều đó. Hy vọng điều này sẽ giúp ai đó ngoài kia

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

Đánh dấu

<a href="<?php echo $feature1_url; ?>"><img class="img-responsive center-block" src="<?php echo $feature1; ?>" alt="<?php echo $image1_alt; ?>"></a>
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.