web-dev-qa-db-de.com

Wie rufe ich den Alternativtext eines Bildanhangs ab?

Ich verwende eine attachment.php-Datei, um große Versionen von Bildern anzuzeigen, auf die an anderer Stelle geklickt wurde. Ich möchte den Bildalttext mit Javascript als Beschriftung unter das Bild ziehen, aber der Alttext ist nicht enthalten, wenn wp_get_attachment_image_src () verwendet wird. Ich glaube nicht, dass WP eine Funktion zum Abrufen hat, also brauche ich meine eigene. Um diese Funktion zu schreiben, muss ich wissen ... Wo ist der Alternativtext für ein Bild gespeichert?

Meine Seite mit Anhängen verwendet wp_get_attachment_image_src(), wobei der Alternativtext nicht enthalten ist.

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

Das zeigt:

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

Mir ist bekannt, dass der $post->post_excerpt im obigen Code aufgerufen wird, aber ich bin nicht sicher, durch was ich ihn ersetzen soll, um das alt-Attribut des Bildes zu erhalten.

32
kevtrout

Ich habe kürzlich für ein Kundenprojekt recherchiert, also lo-and-beholddarf ich es hier verwenden!

Nach dem Text sehen Sie eine kategorisierte Liste der meisten (alle?) Bildbearbeitungsfunktionen in WordPress 3.0.1.

Wie auch immer,Beantwortung dessen, was (ich denke) Sie brauchen, anstatt was Sie gefragt haben(okay, das werde ich auch beantworten, am Ende) Ich denke, was Sie brauchen, ist Die Funktion wp_get_attachment_image(), die eine HTML-Zeichenfolge mit den folgenden Attributen zurückgibt:

  • 'src',
  • 'class',
  • 'alt' und
  • 'title'.

WordPress 3.0 Bildbearbeitungsfunktionen

Hier sind also die Bildbearbeitungsfunktionen von WordPress für Ihre und die der anderen Referenz (unten finden Sie die Antwort auf Ihre genaue Frage):

Bildunterstützung/Thumbnails

Befestigung

MIME-Typen

Uploads

Dateisystem

HTML

Low Level Image Handling:


Wie versprochen wird der 'alt'Text des Bildes als String in wp_postmeta mit dem meta_key von '_wp_attachment_image_alt'gespeichert.

Wie Sie wahrscheinlich bereits wissen, können Sie es mit einer einfachen get_post_meta() wie folgt laden:

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

53
MikeSchinkel

Betrachten Sie wp_prepare_attachment_for_js( $attachment ), wobei $attachment das WP_Post-Objekt des Anhangs selbst ist.

Dies ist ein bisschen wie eine "Küchenspülfunktion", bietet aber einen sehr netten Hash mit einer Menge Metadaten, einschließlich "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,
    );

Dies ist besonders nützlich (wie der Name schon sagt), um das Meta des Anhangsbilds über wp_send_ajax() an eine wp.media-Ansicht zu senden. Dies bedeutet jedoch nicht, dass Sie es nicht für andere Zwecke verwenden können.

Ich mag es, mich vom _wp_attachment_image_alt-Post-Metafeld zu entfernen, falls sich die Methode zum Abrufen des Alternativtexts jemals ändert (unwahrscheinlich, aber vorstellbar).

Ich glaube jedoch, dass es einen Fall für eine wp_get_attachment_image_alt()-Methode gibt.

5
Tom Auger

Mikes Antwort ist natürlich korrekt, aber $alt_text = get_post_meta($post->ID, '_wp_attachment_image_alt', true); kann eine leere Zeichenfolge zurückgeben.

wp_get_attachment_image erhält jedoch immer einen Alt_text.

Das Wordpress-Team wendet den folgenden Trick an, indem es zuerst nach post_except sucht und dann den Titel erhält.

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

Ich habe herausgefunden, dass der Alt-Text für Anhänge in einem benutzerdefinierten Meta namens "_wp_attachment_image_alt" gespeichert wurde.

Nachdem ich die ID des Anhangs hatte, konnte ich den Alternativtext mit folgendem Code abrufen:

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

Wenn Sie WP_Customize_Media_Control () verwenden, gibt Ihr get_theme_mod () die Beitrags-ID zurück. Wenn Sie das neue WP_Customize_Image_Control () verwenden, gibt das get_theme_mod () die Bild-URL zurück ()

Hier ist, wie ich es geschafft habe. Hoffe das hilft jemandem da draußen

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

Um zu Mikes Antwort hinzuzufügen, könnte jemand dies nützlich finden. Möglicherweise müssen Sie die spezifische ID des Anhangs abrufen, indem Sie die Post-ID an get_post_thumbnail_id übergeben. Beispiel:

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