it-swarm.com.de

Wie bekomme ich ein Bildtitel/alt-Attribut?

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 .'" />';
  }
?>
9

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];
3
leymannx

Ihr Problem ist, dass Sie für get_post_meta()- und get_the_title()-Funktionen nicht die richtige Anhang-ID angeben.

Dies ist Ihr Code, um die alt des Bildes zu erhalten:

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

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

Wenn Sie Ihren Code lesen, scheint es, als würden Sie die ID des Bildes als Metafeld speichern und dann erhalten Sie diesen Code:

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

Unter der Annahme, dass $image->id in 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, um die alt zu bekommen, um den Titel zu bekommen:

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

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>
2
DevTurtle
$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 Ihren $image->id nicht getestet habe, sondern nur davon ausgegangen bin, 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, der Sie anstößt, ihn auszufüllen.

2
Benn

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!

1
Dario Zadro