จะรับแอตทริบิวต์ชื่อภาพ / alt ได้อย่างไร


17

ในธีมสีขาวของฉันไม่มีการกำหนดค่าแอตทริบิวต์ alt สำหรับโพสต์ตัวเลื่อนที่บ้าน ฉันเพิ่มข้อความแสดงแทนของรูปภาพผ่านส่วนต่อประสานไลบรารีสื่อ ฉันเพิ่มรหัสต่อไปนี้เพื่อแสดงข้อความ / คุณลักษณะ แต่มันไม่แสดง:

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

นี่คือรหัส:

<?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
คุณกำลังพยายามรับเมตาโพสต์ของ$attachment->IDแต่ฉันไม่เห็นข้อมูลเกี่ยวกับ$attachmentวัตถุในรหัสของคุณ
cybmeta

@cybmeta ฉันได้รับโค้ดนี้จากที่นี่wordpress.stackexchange.com/questions/185396/…
Nisha_at_Behance

คุณยังสามารถใช้ปลั๊กอินเช่น 1) wordpress.org/plugins/imageseo 2) wordpress.org/plugins/… 3) wordpress.org/plugins/auto-image-altฉันหวังว่ามันจะช่วยได้!
James

คำตอบ:


18

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

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

เป็นโบนัสนี่คือวิธีดึงภาพ src ด้วยคุณสมบัติข้างต้นนั่นคือทั้งหมดที่เราจำเป็นต้องสร้างมาร์กอัปของภาพนิ่ง

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

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

ฉันไม่ได้รับความแตกต่างในคำตอบของคุณและคนอื่น ๆ ปัญหาในคำถามคือรหัสสิ่งที่แนบไม่ถูกต้องและนั่นคือคำตอบ นอกจากนี้ในคำตอบของคุณคุณจะได้รับ ID สำหรับรูปขนาดย่อของโพสต์ปัจจุบัน แต่ไม่ใช่สำหรับไฟล์แนบที่ต้องการ ดังนั้นมันจึงไม่ตอบ / แก้ปัญหาของ OP
cybmeta

ที่ที่คุณได้รับรหัสภาพของคุณนั้นขึ้นอยู่กับคุณ แต่ขอบคุณสำหรับ downvote ต่อไป โดยเฉพาะอย่างยิ่งที่ดีของคุณที่จะวางคำตอบของฉันเป็นของคุณ
leymannx

25

ปัญหาของคุณคือคุณไม่ได้ให้ ID get_post_meta()และget_the_title()ฟังก์ชั่นการแนบที่ถูกต้อง

นี่คือรหัสของคุณเพื่อรับaltภาพ:

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

และมันถูกต้อง แต่$attachment->IDไม่ได้กำหนดไว้ในรหัสของคุณดังนั้นฟังก์ชันจะไม่ส่งคืนสิ่งใด

อ่านรหัสของคุณดูเหมือนว่าคุณเก็บ ID ของภาพเป็นเขตข้อมูลเมตาแล้วคุณจะได้รับรหัสนี้:

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

ดังนั้นสมมติว่า$image->idถูกต้องในรหัสของคุณคุณควรแทนที่นี้:

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

ด้วย:

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

นั่นคือเพื่อaltให้ได้รับชื่อ:

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

4

ฉันใช้ฟังก์ชั่นอย่างรวดเร็วในทุกธีมของฉันเพื่อรับข้อมูลไฟล์แนบของภาพ:

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

หวังว่านี่จะช่วยได้!


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

}

โปรดทราบว่าฉันไม่ได้ทดสอบของคุณ$image->idสมมติว่าคุณมี ID ไฟล์แนบที่ถูกต้อง $img_metaส่วนที่เหลือมาจาก หาก alt หายไปเรากำลังใช้ชื่อรูปภาพหากชื่อหายไปคุณจะเห็นข้อความ "ไม่มีชื่อ" เพื่อสะกิดให้คุณกรอกข้อมูล


2

ตกลงฉันพบคำตอบที่ไม่มีใครในเน็ตฉันได้ค้นหาวันนี้ โปรดจำไว้ว่านี่จะทำงานได้ก็ต่อเมื่อธีมหรือปลั๊กอินของคุณใช้ WP_Customize_Image_Control () ถ้าคุณใช้ WP_Customize_Media_Control () get_theme_mod () จะส่งคืน ID ไม่ใช่ url

สำหรับโซลูชันของฉันฉันใช้รุ่นใหม่กว่า WP_Customize_Image_Control ()

โพสต์จำนวนมากในฟอรัมมี get_attachment_id () ซึ่งไม่สามารถใช้งานได้อีกต่อไป ฉันใช้ไฟล์แนบ _url_to_postid ()

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

// 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>
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.