Wie rufe ich den Alternativtext eines Bildanhangs ab?


32

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 Anhangsseite verwendet wp_get_attachment_image_src(), die den Alternativtext nicht enthält.

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

Ich bin mir bewusst, dass das $post->post_excerptim obigen Code aufgerufen wird, aber ich bin nicht sicher, durch was es ersetzt werden soll, um das alt-Attribut des Bildes zu erhalten.

Antworten:


53

Ich habe vor kurzem einige der Forschung für ein Client - Projekt vor kurzem so lo-und-siehe ich es hier verwenden!

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

Wie auch immer, zu beantworten, was (ich glaube) Sie brauchen, anstatt wonach Sie gefragt haben ( okay, das beantworte ich auch am Ende ). Ich denke, Sie brauchen die wp_get_attachment_image()Funktion, die einen HTML-String 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 Text des Bildes mit dem meta_key von 'alt'als String gespeichertwp_postmeta'_wp_attachment_image_alt' .

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

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


1
Nun, ich kann nicht anders, als mich ein bisschen bescheuert zu fühlen, jetzt wo du es gesagt hast. Ich habe es schon einmal benutzt wp_get_attachment_imgage()und komplett vergessen. Sie haben Recht mit dem, was ich Ihrer Meinung nach wirklich brauche. Danke für die Information. Sie haben auch Recht, wo das Alt-Meta gespeichert ist ... Ich habe genau an diesem Ort gesucht, aber es ist mir ausgewichen, obwohl ich es direkt angestarrt haben muss. Das ist es, was ich bekomme, um mich am Ende des Tages darauf einzulassen. Danke noch einmal!
Kevtrout

Hey, kein Problem. Ich habe in der jüngeren Vergangenheit auch einige wirklich offensichtliche Fragen auf der Hackerliste gestellt, nur um die Antwort so deutlich wie möglich zu machen, sobald jemand sie erwähnt hat. Es ist leicht, hier oder da etwas zu verpassen. Der eigentliche Vorteil von WordPress Answers ist jedoch, dass jede Frage und Antwort in Zukunft zu einer Ressource für andere mit ähnlichen Fragen wird. Ich erwarte sogar, dass ich etwas google, was ich beantwortet, aber an zukünftigen Punkten vergessen habe!
MikeSchinkel

1
Schnelle Frage: Sie haben angegeben, dass wp_get_attachment_image()ein Array des Bilds src und der Attribute zurückgegeben wird. Es scheint nur HTML mit dem Bild und seinen Attributen zurückzugeben. Erledigt
kevtrout

1
@Mike - Nur eine kurze Erinnerung, um den Hinweis zu wp_get_attachment_image als Array zu aktualisieren - das hat mich ein bisschen verblüfft :). Ausgezeichnete Antwort ansonsten!
Jonathan Wold

1
Sehr ausführliche Antwort, gut gemacht!
Bas van Dijk

5

Überlegen Sie wp_prepare_attachment_for_js( $attachment ), wo $attachmentsich das WP_Post-Objekt des Anhangs befindet.

Dies ist eine Art "Küchenspülfunktion", bietet jedoch einen sehr guten 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 an eine wp.media-Ansicht zu senden. Dies bedeutet wp_send_ajax()jedoch nicht, dass Sie es nicht für andere Zwecke verwenden können.

Ich mag es, vom _wp_attachment_image_altPost-Meta-Feld wegzugehen , falls sich die Methode zum Abrufen des Alternativtexts jemals ändert (unwahrscheinlich, aber vorstellbar).

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


Genau das, wonach ich gesucht habe. Hat jemand eine Vorstellung von seiner Leistung? Mit so vielen verschiedenen Werten, die es abruft ... Ich frage mich ...
Larzan

@Larzan Ich würde mir keine Sorgen um die Leistung machen - es sei denn, Sie erhalten Hunderte von Bilddaten gleichzeitig ...
Tom Auger

4

Mikes Antwort ist natürlich richtig, $alt_text = get_post_meta($post->ID, '_wp_attachment_image_alt', true);kann aber 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 )); 
}

2

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

0

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

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_idBeispiel übergeben:

  $the_img = wp_get_attachment_image( get_post_thumbnail_id( get_the_ID() ) );
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.