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

时间:2010-08-30 作者:kevtrout

我正在使用附件。php文件,以显示在其他地方单击的图像的大版本。我想使用javascript将图像alt文本作为标题拉到图像下,但在使用wp\\u get\\u attachment\\u image\\u src()时,alt文本不包括在内。我认为WP没有检索它的功能,所以我需要自己的。要编写该函数,我需要知道。。。图像的alt文本存储在哪里?

我的附件页使用wp_get_attachment_image_src(), 其中不包括alt文本。

<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属性。

6 个回复
最合适的回答,由SO网友:MikeSchinkel 整理而成

我最近为一个客户项目做了一些研究,所以我可以在这里使用它!

在文本之后,您将看到大多数(所有?)WordPress 3.0.1中的图像处理功能(我将它们按某种看似有序的顺序进行了分组,但我的分类没有太多可信度。)

不管怎样,answering what (I think) you need instead of what you asked forwp_get_attachment_image() 函数,该函数将返回包含以下属性的HTML字符串:

SO网友:Tom Auger

考虑查看wp_prepare_attachment_for_js( $attachment ), 哪里$attachment 是附件本身的WP\\u 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特别有用(顾名思义)。媒体视图通过wp_send_ajax(), 但这并不意味着你不能将其用于其他目的。

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

我确实觉得wp_get_attachment_image_alt() 方法。

SO网友:GUI Junkie

Mike\'s 答案当然是正确的,但是$alt_text = get_post_meta($post->ID, \'_wp_attachment_image_alt\', true); 可能返回空字符串。

wp_get_attachment_image, 但是,始终会获得alt\\u文本。

Wordpress团队采用以下技巧,首先,检查post\\u 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 )); 
}

SO网友:chilljul

我发现附件的Alt文本存储在一个名为“\\u wp\\u attachment\\u image\\u Alt”的自定义元上

因此,有了附件的Id,我可以用以下代码获取alt文本:

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

SO网友:Uriahs Victor

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

  $the_img = wp_get_attachment_image( get_post_thumbnail_id( get_the_ID() ) );

SO网友:DevTurtle

如果您使用的是WP\\u Customize\\u Media\\u Control(),则get\\u theme\\u mod()将返回帖子id,但如果您使用的是新的WP\\u Customize\\u Image\\u Control(),则get\\u theme\\u mod()将返回图像url,这就是我使用WP\\u Customize\\u Image\\u 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 );
标记

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

结束

相关推荐