在我的白色主题中,没有为home滑块发布配置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 .'" />';
  }
?>


评论

您正在尝试获取$ attachment-> ID的帖子元,但在您的代码中看不到有关$ attachment对象的任何信息。

@cybmeta我从这里获得了此代码段wordpress.stackexchange.com/questions/185396/…

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

#1 楼

来到这里是因为这篇文章是寻找WordPress图片替代和标题时搜索引擎上热门的文章之一。令我惊讶的是,所有答案都没有提供一个与问题标题相匹配的简单解决方案,我将放弃我的最终想法,希望对将来的读者有所帮助。

br />另外,这里还提供了检索图像src的方法。有了以上属性,我们就需要构建静态图像的标记。

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


评论


您的回答与其他人没有区别。问题中的问题是附件ID不正确,这就是答案。此外,在您的答案中,您将获得当前帖子缩略图的ID,但不会获得所需附件的ID。因此它不能回答/解决OP的问题。

– cybmeta
19年3月20日在11:14

您可以从哪里获得图像ID。但是还是谢谢你的反对。非常感谢您将我的答案粘贴到您的答案中。

–leymannx
19 Mar 26 '19在16:05

您对此表示赞同,就像您描述的那样。在Google上人气很高,很好的答案。

–user3135691
20年5月8日在19:06

#2 楼

您的问题是您没有为get_post_meta()get_the_title()函数提供正确的附件ID。

这是获取图像的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 );


#3 楼

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

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


希望有帮助!

#4 楼

好的,我找到了答案,这是我现在几天都在网上找不到的答案。请记住,这仅在主题或插件使用WP_Customize_Image_Control()时有效,如果使用WP_Customize_Media_Control(),则get_theme_mod()将返回ID而不是URL。

对于我的解决方案使用较新版本的WP_Customize_Image_Control()

论坛上的许多帖子都有get_attachment_id(),该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>


#5 楼

$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,则使用图像标题;如果缺少标题,则将看到“缺少标题”文本,以供您填充。