วิธีการดึงข้อความ Alt ของรูปภาพที่แนบมา?


32

ฉันใช้ไฟล์ Attach.php เพื่อแสดงรูปภาพขนาดใหญ่ที่คลิกไปที่อื่น ฉันต้องการดึงข้อความ alt รูปภาพเป็นคำบรรยายใต้ภาพด้วย javascript แต่ข้อความ alt จะไม่รวมอยู่เมื่อใช้ wp_get_attachment_image_src () ฉันไม่คิดว่า WP มีฟังก์ชั่นในการเรียกคืนดังนั้นฉันต้องการของฉันเอง ในการเขียนฟังก์ชั่นนั้นฉันจำเป็นต้องรู้ ... ข้อความ alt ของรูปภาพเก็บไว้ที่ไหน

หน้าเอกสารแนบของฉันใช้wp_get_attachment_image_src()ซึ่งไม่มีข้อความกำกับภาพ

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

การแสดงนี้:

<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_excerptกำลังถูกเรียกใช้ในโค้ดด้านบน แต่ฉันไม่แน่ใจว่าจะแทนที่ด้วยอะไรเพื่อให้ได้แอตทริบิวต์ alt ของภาพ

คำตอบ:


53

ฉันเพิ่งได้บางวิจัยสำหรับโครงการลูกค้าเมื่อเร็ว ๆ นี้ดังนั้นแท้จริงและดูเถิดฉันได้รับการใช้งานได้ที่นี่!

หลังจากข้อความคุณจะเห็นรายการหมวดหมู่ของฟังก์ชั่นการจัดการรูปภาพส่วนใหญ่ (ทั้งหมด?) จากภายใน WordPress 3.0.1 (ฉันจัดกลุ่มไว้ในลักษณะที่เรียงตามลำดับ แต่ไม่ให้ความน่าเชื่อถือมากเกินไปในการจัดหมวดหมู่ของฉัน)

อย่างไรก็ตามตอบสิ่งที่ (ฉันคิดว่า) ที่คุณต้องการแทนสิ่งที่คุณขอ ( ไม่เป็นไรฉันจะตอบด้วยเช่นกันในตอนท้าย ) ฉันคิดว่าสิ่งที่คุณต้องการคือwp_get_attachment_image()ฟังก์ชั่นที่จะกลับสตริง HTML ที่มีคุณลักษณะเหล่านี้:

  • 'src',
  • 'class',
  • 'alt' และ
  • 'title'.

WordPress 3.0 ฟังก์ชั่นการจัดการรูปภาพ

ดังนั้นนี่คือฟังก์ชั่นการจัดการรูปภาพของ WordPress สำหรับการอ้างอิงของคุณและของผู้อื่น ( ข้ามด้านล่างเพื่อดูคำตอบสำหรับคำถามที่แน่นอนของคุณ ):

สนับสนุนรูปภาพ / รูปขนาดย่อ

ความผูกพัน

ประเภท MIME

อัปโหลด

ระบบแฟ้ม

HTML

การจัดการรูปภาพระดับต่ำ:


ในฐานะที่เป็นสัญญาภาพของ'alt'ข้อความจะถูกเก็บไว้เป็นสตริงในwp_postmetaกับ meta_key '_wp_attachment_image_alt'ของ

ในขณะที่คุณอาจจะรู้อยู่แล้วว่าคุณสามารถโหลดมันด้วยง่ายๆget_post_meta()เช่นดังนั้น:

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


1
ดีฉันไม่สามารถ แต่ช่วยรู้สึกงี่เง่าเล็กน้อยที่คุณได้พูดมัน ฉันเคยใช้มาwp_get_attachment_imgage()ก่อนและลืมไปเลย คุณพูดถูกที่ฉันคิดว่าฉันต้องการจริงๆ ขอบคุณสำหรับข้อมูล. คุณยังถูกต้องเกี่ยวกับที่เก็บ meta alt ... ฉันดูในสถานที่นั้นมาก แต่มันก็เลี่ยงฉันได้แม้ว่าฉันจะต้องจ้องมองมัน นั่นคือสิ่งที่ฉันได้รับในตอนท้ายของวัน ขอบคุณอีกครั้ง!
kevtrout

เฮ้ไม่มีปัญหา ฉันได้ถามคำถามที่ชัดเจนบางอย่างในอดีตที่ผ่านมาเช่นกันในรายชื่อแฮ็กเกอร์เท่านั้นที่จะได้คำตอบที่ชัดเจนทันทีที่มีคนพูดถึงมัน มันง่ายที่จะพลาดบางสิ่งบางอย่างที่นี่หรือที่นั่น แต่ประโยชน์ที่แท้จริงของ WordPress Answers คือทุกคำถามและคำตอบกลายเป็นแหล่งข้อมูลสำหรับผู้อื่นที่มีคำถามคล้ายกันในอนาคต ฉันยังคาดหวังว่าฉันจะ google สิ่งที่ฉันตอบ แต่ลืมจุดในอนาคต!
MikeSchinkel

1
คำถามด่วน: คุณระบุว่าwp_get_attachment_image()จะส่งคืนอาร์เรย์ของรูปภาพ src และคุณลักษณะ ดูเหมือนว่าจะส่งคืนเพียง html ที่มีภาพและคุณลักษณะของมัน ยังทำงานอยู่ แต่ไม่ทราบว่าคุณทราบถึงสิ่งที่ไม่ได้อยู่ในฟังก์ชันอ้างอิงหรือไม่: codex.wordpress.org/Function_Reference/wp_get_attachment_image
kevtrout

1
@Mike - เพียงแค่เตือนความจำอย่างรวดเร็วเพื่ออัปเดตบันทึกเกี่ยวกับ wp_get_attachment_image เป็นอาร์เรย์ - นั่นทำให้ฉันตกใจเล็กน้อย :) คำตอบที่ยอดเยี่ยมเป็นอย่างอื่น!
Jonathan Wold

1
คำตอบโดยละเอียดมากทำได้ดีมาก!
Bas van Dijk

5

ลองพิจารณาดูwp_prepare_attachment_for_js( $attachment )ว่า$attachmentวัตถุ WP_Post ของไฟล์แนบนั้นอยู่ที่ไหน

นี่เป็นฟังก์ชั่น "อ่างล้างจาน" เล็กน้อย แต่ก็มีแฮชที่ดีมากพร้อมเมตาดาต้ามากมายรวมถึง '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,
    );

สิ่งนี้มีประโยชน์อย่างยิ่ง (ตามชื่อหมายถึง) สำหรับการส่งเมตารูปภาพที่แนบไปยัง wp.media View through wp_send_ajax()แต่นั่นไม่ได้หมายความว่าคุณไม่สามารถใช้มันเพื่อจุดประสงค์อื่น

ฉันชอบการกระโดดออกจากช่อง_wp_attachment_image_altโพสต์เมตาในกรณีที่วิธีการดึงข้อความ ALT เคยเปลี่ยนไป (ไม่น่าเป็นไปได้ แต่เป็นไปได้)

ฉันรู้สึกว่ามีกรณีสำหรับwp_get_attachment_image_alt()วิธีการ


สิ่งที่ฉันกำลังมองหา ไม่มีใครมีความคิดเกี่ยวกับประสิทธิภาพของมันหรือไม่? ด้วยค่าที่แตกต่างกันมากมายมันสามารถดึงกลับมาได้ ... ฉันสงสัยว่า ...
Larzan

@Larzan ฉันจะไม่ต้องกังวลเกี่ยวกับผลการปฏิบัติงาน - ถ้าคุณได้รับหลายร้อยของข้อมูลภาพในเวลาเดียวกัน ...
ทอม Auger

4

แน่นอนคำตอบของ Mikeถูกต้อง แต่$alt_text = get_post_meta($post->ID, '_wp_attachment_image_alt', true);อาจส่งคืนสตริงว่าง

อย่างไรก็ตามwp_get_attachment_imageจะได้รับ alt_text เสมอ

ทีมงาน Wordpress ใช้เคล็ดลับต่อไปนี้ก่อนอื่นตรวจสอบ post_except จากนั้นรับชื่อเรื่อง

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

ฉันพบว่าข้อความ Alt สำหรับสิ่งที่แนบมาถูกเก็บไว้ในเมตาแบบกำหนดเองที่เรียกว่า "_wp_attachment_image_alt"

ดังนั้นเมื่อมีรหัสของสิ่งที่แนบมาฉันสามารถรับข้อความ alt ด้วยรหัสนี้:

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

0

หากคุณใช้ WP_Customize_Media_Control () get_theme_mod () ของคุณจะส่งคืนรหัสโพสต์ แต่ถ้าคุณใช้ WP_Customize_Image_Control () ใหม่ get_theme_mod () จะส่งคืน URL รูปภาพนี่คือวิธีที่ฉันสามารถรับข้อความ alt จากการใช้ WP_Customize_Media_Control () ()

นี่คือวิธีที่ฉันสามารถทำได้ หวังว่านี่จะช่วยให้ใครบางคนที่นั่น

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

มาร์กอัป

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

0

หากต้องการเพิ่มคำตอบของ Mike บางคนอาจพบว่ามีประโยชน์ คุณอาจต้องได้รับ ID เฉพาะของไฟล์แนบดังนั้นคุณสามารถทำได้โดยส่ง Post ID ไปที่get_post_thumbnail_idตัวอย่าง:

  $the_img = wp_get_attachment_image( get_post_thumbnail_id( get_the_ID() ) );
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.