Jak uzyskać atrybut tytuł / alt obrazu?

17

W moim białym motywie nie ma skonfigurowanego atrybutu alt dla postu suwaka głównego. Dodałem tekst alternatywny dla obrazu poprzez interfejs biblioteki multimediów. Dodałem następujący kod, aby wyświetlić tekst alternatywny / atrybut. Ale to nie wyświetla:

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

Oto kod:

<?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
źródło
1
Próbujesz uzyskać meta postu, $attachment->IDale nie widzę żadnych informacji o $attachmentobiekcie w twoim kodzie.
cybmeta
@cybmeta Mam ten fragment kodu stąd wordpress.stackexchange.com/questions/185396/…
Nisha_at_Behance
Możesz także użyć wtyczek, takich jak 1) wordpress.org/plugins/imageseo 2) wordpress.org/plugins/… 3) wordpress.org/plugins/auto-image-alt Mam nadzieję, że to pomoże!
James

Odpowiedzi:

18

Przyszedł tutaj, ponieważ ten wpis jest jednym z najczęściej odwiedzanych wyszukiwarek, gdy szuka się obrazu WordPress alt i tytułu. Będąc raczej zaskoczonym, że żadna z odpowiedzi nie wydaje się stanowić prostego rozwiązania pasującego do tytułu pytania, porzucę to, co wymyśliłem, mając nadzieję, że pomoże to przyszłym czytelnikom.

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

Jako bonus, oto jak odzyskać obraz src. Dzięki powyższym atrybutom wystarczy nam zbudować znacznik obrazu statycznego.

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

$image_src = wp_get_attachment_image_src($image_id, $size)[0];
leymannx
źródło
Nie rozumiem różnicy w twojej odpowiedzi i innych. Problem w tym pytaniu polegał na tym, że identyfikator załącznika był niepoprawny i taka jest odpowiedź. Ponadto w odpowiedzi otrzymujesz identyfikator miniatury bieżącego postu, ale nie żądanego załącznika. więc nie odpowiada / nie rozwiązuje pytania PO.
cybmeta
Od ciebie zależy, gdzie dostaniesz swój identyfikator obrazu. Ale i tak dziękuję za głosowanie. Szczególnie miło z twojej strony, że wkleiłeś moją odpowiedź do swojej.
leymannx
25

Problem polega na tym, że nie podajesz poprawnego identyfikatora załącznika get_post_meta()i get_the_title()funkcji.

To jest twój kod, aby uzyskać altobraz:

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

I jest to poprawne, ale $attachment->IDnie jest zdefiniowane w kodzie, więc funkcja nic nie zwraca.

Po odczytaniu kodu wydaje się, że przechowujesz identyfikator obrazu jako pole meta, a następnie otrzymujesz go za pomocą tego kodu:

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

Zakładając, że $image->idjest to poprawne w kodzie, powinieneś zastąpić to:

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

Z:

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

To znaczy alt, żeby zdobyć tytuł:

 $image_title = get_the_title( $image->id );
cybmeta
źródło
4

Używam szybkiej funkcji we wszystkich moich motywach, aby uzyskać dane załącznika do obrazu:

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

Mam nadzieję że to pomoże!

Dario Zadro
źródło
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 . '" />';

}

pamiętaj, że nie przetestowałem twojego $image->id, po prostu założyłem, że masz odpowiedni identyfikator załącznika. Reszta pochodzi $img_meta. Jeśli brakuje alt, używamy tytułu obrazu, jeśli brakuje tytułu, zobaczysz tekst „Brak tytułu”, który zachęci cię do wypełnienia.

Benn
źródło
2

Ok znalazłem odpowiedź, której nikt nie ma w sieci, której szukałem od kilku dni. Zachowaj w kopalni, działa to tylko wtedy, gdy Twój motyw lub wtyczka korzysta z WP_Customize_Image_Control (), jeśli używasz WP_Customize_Media_Control (), get_theme_mod () zwróci identyfikator, a nie adres URL.

Do mojego rozwiązania korzystałem z nowszej wersji WP_Customize_Image_Control ()

Wiele postów na forach zawiera funkcję get_attachment_id (), która już nie działa. Użyłem załącznika_url_to_postid ()

Oto jak mogłem to zrobić. Mam nadzieję, że to pomoże komuś tam

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

Narzut

<a href="<?php echo $feature1_url; ?>"><img class="img-responsive center-block" src="<?php echo $feature1; ?>" alt="<?php echo $image1_alt; ?>"></a>
DevTurtle
źródło