画像添付の代替テキストを取得する方法は?


32

attachment.phpファイルを使用して、他の場所でクリックされた画像の大きなバージョンを表示しています。javascriptを使用して、画像の下にキャプションとして画像の代替テキストを引き出したいのですが、wp_get_attachment_image_src()が使用されている場合、代替テキストは含まれません。WPにそれを取得する機能があるとは思わないので、自分で作成する必要があります。その関数を書くために私は知る必要があります...画像の代替テキストはどこに保存されていますか?

私の添付ページではwp_get_attachment_image_src()、代替テキストを含まないを使用しています。

<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属性を取得するために何を置き換えるのかわかりません。

回答:


53

私は最近、最近、クライアントプロジェクトのためにいくつかの研究をやったので、LO-と-見よ、私はここでそれを使用して取得します!

テキストの後に、WordPress 3.0.1内のほとんど(すべて?)の画像処理関数の分類されたリストが表示されます(順序の類似度でそれらをグループ化しましたが、分類にあまり信用を入れません)。

とにかく、あなたが求めたものの代わりにあなたが必要とするもの(私は思う)に答えます大丈夫、私も最後に答えます)私はあなたが必要なのはwp_get_attachment_image()これらの属性を含むHTML文字列を返す関数だと思います:

  • 'src'
  • 'class'
  • 'alt' そして
  • 'title'

WordPress 3.0画像処理関数

だからここにあなたと他の参照のためのWordPressの画像処理機能があります(正確な質問への答えのために下にジャンプしてください):

画像サポート/サムネイル

添付ファイル

MIMEタイプ

アップロード

ファイルシステム

HTML

低レベル画像処理:


約束どおり、画像の'alt'テキストはwp_postmetaのmeta_keyとともに文字列として保存されます'_wp_attachment_image_alt'

おそらく既にご存知のget_post_meta()ように、次のような簡単な方法でロードできます。

$alt_text = get_post_meta($post->ID, '_wp_attachment_image_alt', true);


1
さて、私はあなたがそれを言ったので、今少し眠りを感じずにはいられません。私はwp_get_attachment_imgage()以前に使用したことがあり、それを完全に忘れていました。あなたは私が実際に必要だと思ったものについて正しいです。情報をありがとう。altメタの保存場所についてもあなたは正しいです...私はその場所を探しましたが、私はそれを見つめていたに違いありませんでした。それは私が一日の終わりにそれに入るために得るものです。再度、感謝します!
kevtrout

おい、問題ない。ハッカーのリストでも最近誰かに本当に明らかな質問をしてきましたが、誰かが言及するとすぐに答えが明白になるようにしただけです。あちこちで見逃すのは簡単です。しかし、WordPress Answersの真の利点は、すべての質問と回答が将来同様の質問を持つ他の人のリソースになることです。私は答えたものをグーグルで検索することを期待していますが、将来のポイントで忘れていました!
MikeSchinkel

1
簡単な質問:wp_get_attachment_image()画像srcと属性の配列を返すことを示しました。画像とその属性を含むhtmlのみを返すようです。:それでも、ちょうどあなたがいない機能Refに何かを知っていた場合、ジョブは知らなかったんcodex.wordpress.org/Function_Reference/wp_get_attachment_image
kevtrout

1
@Mike-wp_get_attachment_imageについてのメモを配列として更新するための簡単なリマインダー-少し困惑しました:)。それ以外の場合の優れた答え!
ジョナサンウォルド

1
非常に詳細な答え、よくやった!
バス

5

を見てみましょうwp_prepare_attachment_for_js( $attachment )。ここ$attachmentで、添付ファイル自体のWP_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.media Viewに送信するのに特に役立ちwp_send_ajax()ますが、他の目的に使用できないという意味ではありません。

_wp_attachment_image_altaltテキストを取得するメソッドが変更される可能性がある場合に備えて、ポストメタフィールドから抽象化するのが好きです(可能性は低いですが、考えられます)。

wp_get_attachment_image_alt()しかし、メソッドにはケースがあると感じています。


まさに私が探していたもの。誰もがそのパフォーマンスのアイデアを持っていますか?非常に多くの異なる値を取得しています...私は疑問に思います
...-ラーザン

I @Larzanパフォーマンスを心配しないでしょう-あなたは...同時に画像データの数百を取得している場合を除き
トム・オージェ

4

もちろん、マイクの答えは正しいですが$alt_text = get_post_meta($post->ID, '_wp_attachment_image_alt', true);、空の文字列を返す場合があります。

ただし、wp_get_attachment_imageは、常にalt_textを取得します。

Wordpressチームは、最初にpost_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 )); 
}

2

添付ファイルのAltテキストが「_wp_attachment_image_alt」というカスタムメタに保存されていることがわかりました

そのため、添付ファイルのIDがあれば、次のコードで代替テキストを取得できました。

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

0

WP_Customize_Media_Control()を使用している場合、get_theme_mod()は投稿IDを返しますが、新しいWP_Customize_Image_Control()を使用している場合、get_theme_mod()は画像urlを返します。 ()

これが私がそれをすることができた方法です。これが誰かを助けることを願っています

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

0

マイクの答えに追加するには、誰かがこれが便利だと思うかもしれません。添付ファイルの特定のIDを取得する必要がある場合があるため、Post IDをget_post_thumbnail_id例に渡すことで取得できます。

  $the_img = wp_get_attachment_image( get_post_thumbnail_id( get_the_ID() ) );
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.