Wie erhalte ich das Bildtitel- / Alt-Attribut?

17

In meinem weißen Thema gibt es kein alt-Attribut, das für den Home-Slider-Beitrag konfiguriert ist. Ich habe den Alternativtext für das Bild über die Benutzeroberfläche der Medienbibliothek hinzugefügt. Ich habe den folgenden Code hinzugefügt, um den alternativen Text / das alternative Attribut anzuzeigen. Es wird jedoch nicht angezeigt:

<img class="homepage-slider_image" src="http://www.blabla.com/wp-content/uploads/2013/06/cms-website4-1800x800.jpg" alt="" />

Hier ist der Code:

<?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 .'" />';
  }
?>
Nisha_at_Behance
quelle
1
Sie versuchen das Post-Meta von zu bekommen, $attachment->IDaber ich kann keine Informationen über das $attachmentObjekt in Ihrem Code sehen.
Cybmeta
@cybmeta Ich habe diesen Codeausschnitt von hier bekommen wordpress.stackexchange.com/questions/185396/…
Nisha_at_Behance

Antworten:

13

Kam hierher, da dieser Beitrag zu den Top-Hits in der Suchmaschine gehört, wenn nach WordPress-Bildalt und -Titel gesucht wird. Da ich ziemlich überrascht bin, dass keine der Antworten eine einfache Lösung zu bieten scheint, die dem Titel der Frage entspricht, werde ich das, was ich mir ausgedacht habe, am Ende fallen lassen und hoffen, dass es zukünftigen Lesern hilft.

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

Als Bonus erfahren Sie hier, wie Sie eine Bildquelle abrufen. Mit den obigen Attributen ist das alles, was wir brauchen, um das Markup eines statischen Bildes zu erstellen.

$size = 'my-size' // Defaults to 'thumbnail' if omitted.

$image_src = wp_get_attachment_image_src($image_id, $size)[0];
leymannx
quelle
Ich verstehe den Unterschied in Ihrer Antwort und den anderen nicht. Das Problem bei der Frage war, dass die Anhangs-ID nicht korrekt war, und das ist die Antwort. Außerdem erhalten Sie in Ihrer Antwort die ID für das Miniaturbild des aktuellen Beitrags, jedoch nicht für den gewünschten Anhang. daher wird die Frage des OP nicht beantwortet / gelöst.
Cybmeta
Woher Sie Ihre Bild-ID beziehen, liegt ganz bei Ihnen. Aber trotzdem danke für die Ablehnung. Besonders nett von dir, meine Antwort in deine einzufügen.
Leymannx
25

Ihr Problem ist, dass Sie die ID get_post_meta()und get_the_title()Funktionen des Anhangs nicht korrekt angeben .

Dies ist Ihr Code, um altdas Bild zu erhalten:

$image_alt = get_post_meta( $attachment->ID, '_wp_attachment_image_alt', true);

Und es ist korrekt, aber $attachment->IDnicht in Ihrem Code definiert, daher gibt die Funktion nichts zurück.

Wenn Sie Ihren Code lesen, scheint es, als ob Sie die ID des Bildes als Metafeld speichern und Sie erhalten sie dann mit diesem Code:

$image = get_post_meta(get_the_ID(), WPGRADE_PREFIX.'homepage_slide_image', true);

Unter der Annahme, dass dies $image->idin Ihrem Code korrekt ist, sollten Sie Folgendes ersetzen:

$image_alt = get_post_meta( $attachment->ID, '_wp_attachment_image_alt', true);

Mit:

$image_alt = get_post_meta( $image->id, '_wp_attachment_image_alt', true);

Das ist alt, um den Titel zu bekommen:

 $image_title = get_the_title( $image->id );
cybmeta
quelle
4

Ich verwende in all meinen Designs eine Schnellfunktion, um Daten zu Bildanhängen abzurufen:

//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
        );
    }
}

Hoffe das hilft!

Dario Zadro
quelle
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 . '" />';

}

Bitte beachten Sie, dass ich Ihre nicht getestet habe, sondern $image->idnur davon ausgegangen habe, dass Sie die richtige Anhangs-ID haben. Der Rest kommt von $img_meta. Wenn alt fehlt, wird der Bildtitel verwendet. Wenn der Titel fehlt, wird der Text "Fehlender Titel" angezeigt, um Sie zum Ausfüllen zu bewegen.

Benn
quelle
2

Ok, ich habe die Antwort gefunden, die niemand im Netz hat, nach der ich seit Tagen gesucht habe. In meinem Fall funktioniert dies nur, wenn Ihr Theme oder Plugin WP_Customize_Image_Control () verwendet. Wenn Sie WP_Customize_Media_Control () verwenden, gibt get_theme_mod () die ID und nicht die URL zurück.

Für meine Lösung habe ich die neuere Version WP_Customize_Image_Control () verwendet.

Viele Beiträge in den Foren haben die get_attachment_id (), die nicht mehr funktioniert. Ich habe attachment_url_to_postid () verwendet.

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