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?


32

Tôi đang sử dụng một tệp đí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 lấy văn bản thay thế hình ảnh dưới dạng chú thích bên dưới hình ảnh bằng javascript, nhưng văn bản thay thế 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.

Câu trả lời:


53

Gần đây tôi đã làm một số nghiên cứu cho một dự án của khách hàng thời gian gần đây rất lo-and-Kìa tôi nhận được để sử dụng nó ở đây!

Sau văn bản, bạn sẽ thấy một danh sách được phân loại gồm hầu hết (tất cả?) Các chức năng xử lý hình ảnh từ trong WordPress 3.0.1 (Tôi đã nhóm chúng theo một số thứ tự nhưng không đặt quá nhiều tín nhiệm vào phân loại của tôi.)

Dù sao, trả lời những gì (tôi nghĩ) bạn cần thay vì những gì bạn yêu cầu (được thôi, cuối cùng tôi cũng sẽ trả lời ) Tôi nghĩ cái bạn cần là wp_get_attachment_image()hàm sẽ trả về một chuỗi HTML chứa các thuộc tính này:

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

Chức năng xử lý ảnh WordPress 3.0

Vì vậy, đây là các chức năng xử lý hình ảnh của WordPress cho tài liệu tham khảo của bạn và của người khác ( nhảy bên dưới để trả lời cho câu hỏi chính xác của bạn ):

Hỗ trợ hình ảnh / hình thu nhỏ

Tập tin đính kèm

Các loại MIME

Tải lên

Hệ thống tập tin

HTML

Xử lý hình ảnh cấp thấp:


Như đã hứa , 'alt'văn bản của Hình ảnh được lưu trữ dưới dạng một chuỗi wp_postmetavới meta_key của'_wp_attachment_image_alt' .

Như bạn có thể đã biết, bạn có thể tải nó với một cách đơn giản get_post_meta()như vậy:

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


1
Chà, tôi không thể không cảm thấy một chút dopey bây giờ mà bạn đã nói nó. Tôi đã sử dụng wp_get_attachment_imgage()trước đây và hoàn toàn quên nó. Bạn đúng về những gì tôi nghĩ tôi thực sự cần. Cảm ơn bạn về thông tin. Bạn cũng đúng về nơi lưu trữ meta alt ... Tôi đã nhìn vào chính nơi đó, nhưng nó đã lảng tránh tôi mặc dù tôi phải nhìn chằm chằm vào nó. Đó là những gì tôi nhận được để nhận được vào cuối ngày. Cảm ơn một lần nữa!
kevtrout

Này, không vấn đề gì. Tôi đã hỏi một số câu hỏi thực sự rõ ràng trong quá khứ gần đây trong danh sách tin tặc chỉ để có câu trả lời rõ ràng là rõ ràng ngay khi có ai đó đề cập đến nó. Thật dễ dàng để bỏ lỡ một cái gì đó ở đây hoặc ở đó. Nhưng lợi ích thực sự của Câu trả lời WordPress là mọi câu hỏi và câu trả lời sẽ trở thành tài nguyên cho những người khác có câu hỏi tương tự trong tương lai. Tôi thậm chí mong đợi tôi sẽ trả lời google nhưng tôi đã quên điểm trong tương lai!
MikeSchinkel

1
Câu hỏi nhanh: bạn đã chỉ ra rằng wp_get_attachment_image()trả về một mảng của src hình ảnh và các thuộc tính. Nó dường như chỉ trả về html chứa hình ảnh và thuộc tính của nó. Vẫn thực hiện công việc, chỉ không biết nếu bạn biết về một cái gì đó không có trong chức năng ref: codex.wordpress.org/Function_Reference/wp_get_attachment_image
kevtrout

1
@Mike - Chỉ là một lời nhắc nhanh để cập nhật ghi chú về wp_get_attachment_image dưới dạng một mảng - điều đó làm tôi bối rối một chút :). Câu trả lời tuyệt vời khác!
Jonathan Wold

1
Câu trả lời rất chi tiết, cũng được thực hiện!
Bas van Dijk

5

Hãy xem xét wp_prepare_attachment_for_js( $attachment ), $attachmentđối tượng WP_Post của tệp đính kèm ở đâu.

Đâ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 ngụ ý), để gửi meta hình ảnh đính kèm tới wp.media View 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 _wp_attachment_image_altmeta bài, 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).

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


Chính xác những gì tôi đang tìm kiếm. Có ai có ý tưởng về hiệu suất của nó? Với rất nhiều giá trị khác nhau, nó thu được ... Tôi tự hỏi ...
Larzan 16/07/2015

@Larzan Tôi sẽ không lo lắng về hiệu suất - trừ khi bạn nhận được hàng trăm dữ liệu hình ảnh cùng một lúc ...
Tom Auger

4

Câu trả lời của Mike 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 )); 
}

2

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

0

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

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

0

Để 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 get_post_thumbnail_idví dụ:

  $the_img = wp_get_attachment_image( get_post_thumbnail_id( get_the_ID() ) );
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.