it-swarm-vi.tech

Làm cách nào để truy xuất văn bản thay thế của tệp đính kèm hình ảnh?

Tôi đang sử dụng tệp tin đính kèm để hiển thị các phiên bản lớn của hình ảnh đã được nhấp vào nơi khác. Tôi muốn kéo văn bản alt hình ảnh thành chú thích bên dưới hình ảnh bằng javascript, nhưng văn bản alt không được bao gồm khi wp_get_attachment_image_src () được sử dụng. Tôi không nghĩ WP có chức năng truy xuất nó, vì vậy tôi cần cái riêng của mình. Để viết chức năng đó tôi cần biết ... Văn bản thay thế cho hình ảnh được lưu trữ ở đâu?

Trang đính kèm của tôi sử dụng wp_get_attachment_image_src(), không bao gồm văn bản thay thế.

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

Màn trình diễn này:

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

Tôi biết rằng $post->post_excerpt đang được gọi trong đoạn mã trên, nhưng tôi không chắc nên thay thế nó bằng gì để có được thuộc tính alt của hình ảnh.

32
kevtrout

Hãy xem xét việc xem xét wp_prepare_attachment_for_js( $attachment ), trong đó $attachment là đối tượng WP_Post của chính tệp đính kèm.

Đây là một chút chức năng "bồn rửa nhà bếp", nhưng nó cung cấp hàm băm rất đẹp với hàng tấn siêu dữ liệu, bao gồm cả '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,
    );

Điều này đặc biệt hữu ích (như tên của nó), để gửi meta hình ảnh đính kèm tới Chế độ xem wp.media qua wp_send_ajax(), nhưng điều đó không có nghĩa là bạn không thể sử dụng nó cho các mục đích khác.

Tôi thích trừu tượng hóa khỏi trường meta bài đăng _wp_attachment_image_alt, trong trường hợp phương thức truy xuất văn bản thay đổi từng thay đổi (không thể, nhưng có thể hiểu được).

Tuy nhiên, tôi cảm thấy rằng có một trường hợp cho phương thức wp_get_attachment_image_alt().

5
Tom Auger

Mike's câu trả lời là đúng, tất nhiên, nhưng $alt_text = get_post_meta($post->ID, '_wp_attachment_image_alt', true); có thể trả về một chuỗi trống.

wp_get_attachment_image , tuy nhiên, luôn luôn nhận được một văn bản.

Nhóm Wordpress áp dụng thủ thuật sau, trước tiên, kiểm tra post_except, sau đó lấy tiêu đề.

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

Tôi phát hiện ra rằng văn bản Alt cho tệp đính kèm được lưu trữ trên một meta tùy chỉnh có tên là "_wp_attachment_image_alt"

Vì vậy, có Id của tệp đính kèm, tôi có thể lấy văn bản thay thế bằng mã này:

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

Nếu bạn đang sử dụng WP_Customize_Media_Control () thì get_theme_mod () của bạn sẽ trả về id bài đăng nhưng nếu bạn đang sử dụng WP_Customize_Image_Control () thì get_theme_mod () sẽ trả về url hình ảnh, đây là cách tôi có thể nhận được url hình ảnh. ()

Đâ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 );

Markup

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

Để thêm vào câu trả lời của Mike, ai đó có thể thấy điều này hữu ích. Bạn có thể cần lấy ID cụ thể của tệp đính kèm, vì vậy bạn có thể làm như vậy bằng cách chuyển ID bài đăng sang ví dụ get_post_thumbnail_id:

  $the_img = wp_get_attachment_image( get_post_thumbnail_id( get_the_ID() ) );
0
Uriahs Victor