画像のタイトル/代替属性を取得する方法は?


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私はここからこのコードスニペットを入手していますwordpress.stackexchange.com/questions/185396/…–
Nisha_at_Behance

回答:


16

ここに来たのは、この投稿がWordPressの画像のaltとタイトルを探しているときの検索エンジンのトップヒットの1つだからです。答えがどれも質問のタイトルに一致する簡単な解決策を提供していないように思われることにかなり驚いています。

// 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の質問に回答/解決しません。
サイブメタ

イメージIDの取得元はユーザー次第です。しかし、とにかく下票に感謝します。特に私の答えをあなたの質問に貼り付けてくれてありがとう。
レイマン

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が欠落している場合は、画像のタイトルを使用しています。タイトルが欠落している場合は、「Missing title」というテキストが表示され、入力が必要になります。


2

[OK]を私は今誰も探していないネット上の誰もいないという答えを見つけました。WP_Customize_Media_Control()を使用している場合、テーマまたはプラグインがWP_Customize_Image_Control()を使用している場合にのみ機能します。get_theme_mod()はURLではなくIDを返します。

私のソリューションでは、新しいバージョンの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>
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.