Cum să obții atributul title/alt al imaginii?

1 iul. 2015, 16:49:50
Vizualizări: 174K
Voturi: 36

În tema mea albă, nu există niciun atribut alt configurat pentru sliderul din prima pagină. Am adăugat textul alt pentru imagine prin interfața bibliotecii media. Am adăugat următorul cod pentru a afișa textul/atributul alt. Dar nu se afișează:

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

Iată codul:

<?php
  // Obține meta pentru imaginea din slider
  $image = get_post_meta(get_the_ID(), WPGRADE_PREFIX.'homepage_slide_image', true);
  if (!empty($image)) {
    $image = json_decode($image);
    // Încearcă să obții textul alt al atașamentului
    $image_alt = get_post_meta( $attachment->ID, '_wp_attachment_image_alt', true);
    if ( empty( $image_alt )) {
      // Dacă nu există alt, folosește titlul postării
      $image_alt = $attachment->post_title;
    }
    if ( empty( $image_alt )) {
      // Dacă nu există titlu, folosește descrierea scurtă
      $image_alt = $attachment->post_excerpt;
    }
    $image_title = $attachment->post_title;
    $image_id = $image->id;
    // Obține URL-ul imaginii la dimensiunea specificată
    $image = wp_get_attachment_image_src( $image_id, 'blog-huge', false);
    echo '<img class="homepage-slider_image" src="'.$image[0].'" alt="'. $image_alt .'" />';
  }
?>
3
Comentarii

Încerci să obții meta datele postului pentru $attachment->ID, dar nu văd nicio informație despre obiectul $attachment în codul tău.

cybmeta cybmeta
1 iul. 2015 16:56:53

@cybmeta am obținut acest fragment de cod de aici http://wordpress.stackexchange.com/questions/185396/getting-the-image-title-alt-attribute-from-the-gallery-shortcode

Nisha_at_Behance Nisha_at_Behance
1 iul. 2015 17:06:46
Toate răspunsurile la întrebare 6
0
65

Este suficient doar un ID de atașament/imagine pentru a obține atributele alt și title ale acesteia.

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

Ca bonus, iată cum poți obține src-ul unei imagini. Împreună cu atributele de mai sus, acestea sunt tot ce ne trebuie pentru a construi markup-ul static al unei imagini.

$size = 'dimensiunea-mea' // Implicit este 'thumbnail' dacă este omis.

$image_src = wp_get_attachment_image_src($image_id, $size)[0];
4 mar. 2019 13:41:27
0
30

Problema ta este că nu furnizezi ID-ul corect al atașamentului funcțiilor get_post_meta() și get_the_title().

Acesta este codul tău pentru a obține alt-ul imaginii:

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

Și este corect, dar $attachment->ID nu este definit în codul tău, așa că funcția nu returnează nimic.

Citind codul tău, se pare că stochezi ID-ul imaginii ca un câmp meta și apoi îl obții cu acest cod:

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

Deci, presupunând că $image->id este corect în codul tău, ar trebui să înlocuiești asta:

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

Cu:

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

Asta este pentru a obține alt-ul, pentru a obține titlul:

$image_title = get_the_title( $image->id );
1 iul. 2015 17:41:31
0

Folosesc o funcție rapidă în toate temele mele pentru a obține datele atașamentelor de imagini:

//obține metadatele atașamentului
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
        );
    }
}

Sper că acest lucru vă ajută!

29 ian. 2019 18:41:22
0
$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('Titlu lipsă','{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 . '" />';

}

te rog să notezi că nu am testat $image->id, am presupus doar că ai ID-ul corect al atașamentului. Restul informațiilor provin din $img_meta. Dacă textul alternativ (alt) lipsește, vom folosi titlul imaginii, iar dacă titlul lipsește, vei vedea textul "Titlu lipsă" pentru a te îndemna să îl completezi.

2 ian. 2017 18:41:44
0

Bun, am găsit răspunsul pe care nu-l are nimeni pe internet. Am căutat zile întregi. Rețineți că acest lucru funcționează doar dacă tema sau plugin-ul tău folosește WP_Customize_Image_Control(). Dacă folosești WP_Customize_Media_Control(), get_theme_mod() va returna ID-ul și nu URL-ul.

Pentru soluția mea, am folosit versiunea mai nouă WP_Customize_Image_Control().

Multe postări pe forum au get_attachment_id(), care nu mai funcționează. Eu am folosit attachment_url_to_postid().

Iată cum am reușit să fac asta. Sper că va ajuta pe cineva:

// Acest cod obține imaginea / URL-ul
$feature1 = get_theme_mod('feature_image_1');

// Acest cod obține ID-ul postului
$feature1_id = attachment_url_to_postid($feature1);

// Acest cod obține textul alternativ (alt) al imaginii setat în zona media
$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>
29 apr. 2017 05:30:38
0

Modul corect WordPress ar fi să folosești funcția furnizată get_image_tag() pentru a obține eticheta imaginii, furnizând argumentele id și alt funcției. Alte răspunsuri explică deja cum să obții atributul alt.

Aceasta se ocupă și de atributele srcset și sizes, pe care altfel ar trebui să le furnizezi manual folosind wp_get_attachment_image_srcset, pentru a avea încărcarea optimizată a imaginilor în browserele moderne.

8 apr. 2021 17:00:37