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

17

Dans mon thème blanc, il n'y a pas d'attribut alt configuré pour le post 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 / 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 .'" />';
  }
?>
Nisha_at_Behance
la source
1
Vous essayez d'obtenir la méta post de $attachment->IDmais je ne vois aucune information sur l' $attachmentobjet dans votre code.
cybmeta
@cybmeta J'ai obtenu cet extrait de code d'ici wordpress.stackexchange.com/questions/185396/…
Nisha_at_Behance
Vous pouvez également utiliser des plugins tels que 1) wordpress.org/plugins/imageseo 2) wordpress.org/plugins/… 3) wordpress.org/plugins/auto-image-alt J'espère que cela aide!
James

Réponses:

17

Entré ici car ce post est parmi les meilleurs résultats sur le moteur de recherche lorsque vous recherchez une alt et un titre d'image WordPress. Étant plutôt surpris qu'aucune des réponses ne semble fournir une solution simple correspondant au titre de la question, je laisserai tomber ce que j'ai trouvé en espérant que cela aide 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 créer un balisage d'image statique.

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

$image_src = wp_get_attachment_image_src($image_id, $size)[0];
leymannx
la source
Je ne comprends pas la différence dans votre réponse et les autres. Le problème dans la question était que l'ID de pièce jointe n'était pas correct, et c'est la réponse. De plus, dans votre réponse, vous obtenez l'ID de la vignette du message actuel, mais pas de la pièce jointe souhaitée. donc il ne répond pas / ne résout pas la question de l'OP.
cybmeta
L'endroit où vous obtenez votre ID d'image dépend de vous. Mais merci pour le downvote de toute façon. Particulièrement gentil de votre part de coller ma réponse dans la vôtre.
leymannx
25

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

Voici votre code pour obtenir altl'image de l'image:

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

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

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

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

Donc, en supposant que cela $image->idsoit correct dans votre code, vous devez 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 le alt, pour obtenir le titre:

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

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

//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!

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

}

veuillez noter que je n'ai pas testé votre $image->id, j'ai simplement supposé que vous avez le bon ID de pièce jointe. Le reste vient $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 pousser à le remplir.

Benn
la source
2

Ok, j'ai trouvé la réponse que personne n'a sur le net que je cherchais depuis des jours. Gardez dans le mien, cela ne fonctionne que si votre thème ou plugin utilise WP_Customize_Image_Control () si vous utilisez WP_Customize_Media_Control (), le get_theme_mod () renverra 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

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

Marquage

<a href="<?php echo $feature1_url; ?>"><img class="img-responsive center-block" src="<?php echo $feature1; ?>" alt="<?php echo $image1_alt; ?>"></a>
DevTurtle
la source