web-dev-qa-db-fra.com

Comment obtenir l'attribut title/alt de l'image?

Dans mon thème blanc, il n'y a pas d'attribut alt configuré pour la publication du curseur d'accueil. J'ai ajouté le texte de remplacement pour l'image via l'interface de la médiathèque. J'ai ajouté le code suivant pour afficher le texte/l'attribut alt. Mais il n’affiche pas:

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

Voici le 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
Nisha_at_Behance

Entré ici car cet article figure parmi les plus grands succès du moteur de recherche lors de la recherche d'images alt et de titres WordPress. Étant plutôt surpris qu'aucune des réponses ne semble fournir une solution simple correspondant au titre de la question, j'abandonne ce que j'ai proposé à la fin en espérant que cela aidera les futurs lecteurs.

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

En bonus, voici comment récupérer une image src. Avec les attributs ci-dessus, c'est tout ce dont nous avons besoin pour construire le balisage d'une image statique.

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

$image_src = wp_get_attachment_image_src($image_id, $size)[0];
3
leymannx

Votre problème est que vous ne fournissez pas l'ID de pièce jointe correct aux fonctions get_post_meta() et get_the_title().

Ceci est votre code pour obtenir la alt de l'image:

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

Et c'est correct, mais $attachment->ID n'est pas défini dans votre code, donc, la fonction ne renvoie rien.

En lisant votre code, il semble que vous stockiez l'ID de l'image en tant que méta-champ, puis vous l'obtenez avec ce code:

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

Donc, en supposant que $image->id soit correct dans votre code, vous devriez remplacer ceci:

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

Avec:

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

C’est pour obtenir la alt, pour obtenir le titre:

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

Ok j'ai trouvé la réponse que personne n'a sur le net que je cherchais depuis plusieurs jours. Conservez-le, cela ne fonctionne que si votre thème ou plug-in utilise WP_Customize_Image_Control () si vous utilisez WP_Customize_Media_Control () si get_theme_mod () renvoie l'ID et non l'url.

Pour ma solution, j'utilisais la version plus récente WP_Customize_Image_Control ()

Beaucoup de messages sur les forums ont le get_attachment_id () qui ne fonctionne plus. J'ai utilisé attachment_url_to_postid ()

Voici comment j'ai pu le faire. J'espère que cela aide quelqu'un là-bas

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

}

veuillez noter que je n’ai pas testé votre $image->id, je suppose que vous avez le bon ID de pièce jointe. Le reste vient de $img_meta. Si alt est manquant, nous utilisons le titre de l'image. Si le titre est manquant, vous verrez le texte "Titre manquant" pour vous inciter à le remplir.

2
Benn

J'utilise une fonction rapide dans tous mes thèmes pour obtenir des données de pièce jointe:

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

J'espère que cela t'aides!

1
Dario Zadro