web-dev-qa-db-ja.com

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

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

32
kevtrout

私は最近クライアントプロジェクトのために最近いくつかの研究をしたのでlo-and-behold私はここでそれを使うようになる!

テキストの後に、WordPress 3.0.1内からの画像処理関数の大部分(全部)の分類されたリストが表示されます(私はそれらをいくつかの順序で分類しましたが、分類にあまり多くの信頼を置いていません)。

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

  • 'src'
  • 'class'
  • 'alt'
  • 'title'

WordPress 3.0の画像処理機能

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

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

添付ファイル

MIMEタイプ

アップロード

ファイルシステム

HTML

低レベルの画像処理:


約束されたとおり、 Imageの'alt'テキストはwp_postmetaのmeta_keyを持つ文字列として'_wp_attachment_image_alt'に格納されます。

おそらくすでにご存知のとおり、次のように単純なget_post_meta()を使ってロードできます。

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

53
MikeSchinkel

wp_prepare_attachment_for_js( $attachment )を見ることを検討してください。ここで$attachmentは添付ファイル自体のWP_Postオブジェクトです。

これはちょっとした「台所の流し」機能ですが、 'alt'を含む1トンのメタデータを持つ非常にいいハッシュを提供します。

$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_send_ajax()経由でwp.mediaビューに添付画像メタを送信するのに(名前が示すように)特に便利ですが、それはあなたが他の目的のためにそれを使うことができなかったという意味ではありません。

代替テキストを取得する方法が変わった場合は、_wp_attachment_image_alt投稿メタフィールドから抽象化するのが好きです(ありそうもありませんが考えられます)。

私はwp_get_attachment_image_alt()メソッドの場合があると思うのですが。

5
Tom Auger

Mikeの answerはもちろん正しいですが、$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 )); 
}
4
GUI Junkie

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

添付ファイルのIDを持っているので、私はこのコードで代替テキストを取得することができました:

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

WP_Customize_Media_Control()を使用している場合、get_theme_mod()は投稿IDを返しますが、新しいWP_Customize_Image_Control()を使用している場合は、画像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 );

Markup

<a href="<?php echo $feature1_url; ?>"><img class="img-responsive center-block" src="<?php echo $feature1; ?>" alt="<?php echo $image1_alt; ?>"></a>
0
DevTurtle

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

  $the_img = wp_get_attachment_image( get_post_thumbnail_id( get_the_ID() ) );
0
Uriahs Victor