如何获取图片标题/alt属性?

时间:2015-07-01 作者:Nisha_at_Behance

在我的白色主题中,没有为主滑块帖子配置alt属性。我通过媒体库界面为图像添加了alt文本。我添加了以下代码来显示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 .\'" />\';
  }
?>

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

这篇文章是在搜索引擎上搜索WordPress图片alt和title时最受欢迎的文章之一。令人惊讶的是,没有一个答案能提供与问题标题相匹配的简单解决方案,我将放弃我的想法,希望它能帮助未来的读者。

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

SO网友:cybmeta

您的问题是没有向提供正确的附件IDget_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 );

SO网友:Dario Zadro

我在所有主题中使用快速功能来获取图像附件数据:

//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
        );
    }
}
希望这有帮助!

SO网友:Benn

$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,我们将使用图像标题,如果缺少标题,您将看到“缺少标题”文本以推动您填写。

SO网友:DevTurtle

好吧,我找到了答案,我已经在网上找了好几天了。请记住,只有当您的主题或插件使用WP\\u Customize\\u Image\\u Control()时,此选项才有效。如果您使用WP\\u Customize\\u Media\\u Control()时,get\\u theme\\u mod()将返回ID,而不是url。

对于我的解决方案,我使用了更新版本的WP\\u Customize\\u Image\\u Control()

论坛上的很多帖子都有get\\u attachment\\u id(),现在已经不起作用了。我使用了attachment\\u url\\u to\\u 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>

SO网友:Lovor

真实的WordPress 方法是使用提供的函数get_image_tag() 要获取图像标记,请向函数提供id和alt参数。其他答案已经解释了如何获取alt属性。

它还负责srcset和size属性,否则您应该使用wp_get_attachment_image_srcset, 为了有现代浏览器优化的图像加载。

结束

相关推荐

Replace all media (images)

我为我的Wordpress网站创建了一个新主题,我需要替换网站上的所有媒体(图像),因为我使用的是所有新的图像大小(比我当前网站上最大的图像大小还要大)。98%的图像将使用相同的名称。每个帖子只包含一个(特色)图像,并且帖子的内容区域中没有图像,因此这使工作稍微容易一些。我想知道做这件事最好(最干净)的方法是什么。我考虑了以下因素:使用Wordpress plugin手动删除我所有帖子中的特色图像,删除它们,然后手动添加新图像删除我上传文件夹中的所有媒体,并将其替换为新图像,然后通过以下方式重新生成图像大