it-swarm.cn

如何检索图像附件的Alt文本?

我正在使用attachment.php文件来显示已在其他位置单击的大型图像。我想使用javascript将图像alt文本作为图片下方的标题拉出来,但是当使用wp_get_attachment_image_src()时,不包括alt文本。我不认为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属性。

32
kevtrout

我最近最近为一个客户项目进行了一些研究,所以lo-and-behold我在这里使用它!

在文本之后,您将看到WordPress 3.0.1中大多数(全部?)图像处理函数的分类列表(我将它们按照一些相似的顺序进行分组,但在我的分类中没有过多的信任。)

无论如何,回答什么(我认为)你需要而不是你要求的好吧,我也会回答,最后)我想你是什么需要的是wp_get_attachment_image()函数,它将返回包含以下属性的HTML字符串:

  • 'src'
  • 'class'
  • 'alt'
  • 'title'

WordPress 3.0图像处理功能

所以这里是WordPress的图像处理函数,供您和其他人参考(跳到下面以获得您确切问题的答案):

图像支持/缩略图

附件

MIME类型

上传

文件系统

HTML

低级图像处理:


正如所承诺的那样,Image的'alt' text作为字符串存储在wp_postmeta中,并带有'_wp_attachment_image_alt'的meta_key。

正如您可能已经知道的那样,您可以使用简单的get_post_meta()加载它,如下所示:

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

53
MikeSchinkel

考虑查看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_send_ajax()将附件图像元素发送到wp.media View,但这并不意味着你不能将它用于其他目的。

我喜欢从_wp_attachment_image_alt post元字段中抽象出来,以防检索alt文本的方法发生变化(不太可能,但可以想象)。

我觉得有一种wp_get_attachment_image_alt()方法的情况。

5
Tom Auger

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

我发现附件的Alt文本存储在一个名为“_wp_attachment_image_alt”的自定义元文件中

因此,有了附件的ID,我能够使用以下代码获取alt文本:

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

如果您正在使用WP_Customize_Media_Control(),则get_theme_mod()将返回post id,但如果您使用新的WP_Customize_Image_Control(),则get_theme_mod()将返回图像url,这就是我能够使用WP_Customize_Image_Control获取alt文本的方式()

这是我能够做到的。希望这有助于那里的人

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

要添加到迈克的答案,有人可能会觉得这很有用。您可能需要获取附件的特定ID,因此您可以通过将Post ID传递给get_post_thumbnail_id示例来实现:

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