如何获取图片标题/ 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 2015年


您也可以使用插件,例如1)wordpress.org/plugins/imageseo 2)wordpress.org/plugins/…3wordpress.org/plugins/auto-image-alt我希望它能对您有所帮助!
詹姆斯

Answers:


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不正确,这就是答案。此外,在您的答案中,您将获得当前帖子缩略图的ID,但不会获得所需附件的ID。因此它不能回答/解决OP的问题。
cybmeta

您可以从哪里获得图像ID。但是还是要感谢大家的反对。非常感谢您将我的答案粘贴到您的答案中。
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(),它不再起作用。我使用了attachment_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>
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.