web-dev-qa-db-fra.com

Comment récupérer le texte alternatif d'une pièce jointe?

J'utilise un fichier attachment.php pour afficher de grandes versions d'images sur lesquelles on a cliqué ailleurs. J'aimerais extraire le texte alt de l'image en tant que légende sous l'image avec javascript, mais le texte alt n'est pas inclus lorsque wp_get_attachment_image_src () est utilisé. Je ne pense pas que WP ait une fonction pour le récupérer. J'ai donc besoin de la mienne. Pour écrire cette fonction, j'ai besoin de savoir ... Où le texte de remplacement d'une image est-il stocké?

Ma page de pièce jointe utilise wp_get_attachment_image_src(), qui n'inclut pas le texte de remplacement.

<div class = "entry">
<?php 
if ( wp_attachment_is_image( $post->id ) ) : 
    $att_image = wp_get_attachment_image_src( $post->id, "large");?>

    <a href="<?php echo wp_get_attachment_url($post->id); ?>" 
        title="<?php the_title(); ?>" 
        rel="attachment">
    <img class="attached_img" 
        src="<?php echo $att_image[0];?>" 
        width="<?php echo $att_image[1];?>" 
        height="<?php echo $att_image[2];?>"  
        class="attachment-medium" 
        alt="<?php $post->post_excerpt; ?>" />
    </a> 
} <?php endif;?>
</div>

Ceci montre:

<div class = "entry">
    <a href="http://www.example.com/wp-content/uploads/2010/07/photo_namejpg" 
       title="My_Photo_Title" 
       rel="attachment">
       <img class="attached_img" 
            src="http://www.example.com/wp-content/uploads/2010/07/photo_name_and_size.jpg" 
            width="393" 
            height="500"  
            class="attachment-medium" 
            alt="" />
    </a>
</div>  

Je suis conscient que le $post->post_excerpt est appelé dans le code ci-dessus, mais je ne sais pas par quoi le remplacer par pour obtenir l'attribut alt de l'image.

32
kevtrout

J'ai récemment fait des recherches pour un projet client récemment, donc lo-and-behold, je peux l'utiliser ici!

Après le texte, vous verrez une liste catégorisée de la plupart (toutes?) Des fonctions de traitement des images à partir de WordPress 3.0.1 (je les ai groupées dans un semblant d'ordre, mais je ne mets pas trop de crédibilité dans ma catégorisation.)

Quoi qu'il en soit,répondre à ce que (je pense) vous avez besoin au lieu de ce que vous aviez demandé(ok, je vais répondre à cela aussi, à la fin). Je pense que ce dont vous avez besoin est la fonction wp_get_attachment_image() qui retournera une chaîne HTML contenant ces attributs:

  • 'src',
  • 'class',
  • 'alt' et
  • 'title'.

WordPress 3.0 Fonctions de traitement d'images

Voici donc les fonctions de traitement des images de WordPress pour votre référence et celle des autres (jump ci-dessous pour la réponse à votre question exacte):

Support d'image/Miniatures

Attachement

Types MIME

Uploads

Système de fichiers

HTML

Traitement des images à bas niveau:


Comme promis, le texte 'alt' de Image est stocké sous forme de chaîne dans wp_postmeta avec la méta_key de '_wp_attachment_image_alt'.

Comme vous le savez probablement déjà, vous pouvez le charger avec un simple get_post_meta() comme ceci:

$alt_text = get_post_meta($post->ID, '_wp_attachment_image_alt', true);

53
MikeSchinkel

Envisagez de regarder wp_prepare_attachment_for_js( $attachment ), où $attachment est l'objet WP_Post de la pièce jointe.

C'est un peu une fonction "d'évier de cuisine", mais elle fournit un hachage très agréable avec une tonne de métadonnées, y compris 'alt':

$response = array(
        'id'          => $attachment->ID,
        'title'       => $attachment->post_title,
        'filename'    => wp_basename( $attachment->guid ),
        'url'         => $attachment_url,
        'link'        => get_attachment_link( $attachment->ID ),
        'alt'         => get_post_meta( $attachment->ID, '_wp_attachment_image_alt', true ),
        'author'      => $attachment->post_author,
        'description' => $attachment->post_content,
        'caption'     => $attachment->post_excerpt,
        'name'        => $attachment->post_name,
        'status'      => $attachment->post_status,
        'uploadedTo'  => $attachment->post_parent,
        'date'        => strtotime( $attachment->post_date_gmt ) * 1000,
        'modified'    => strtotime( $attachment->post_modified_gmt ) * 1000,
        'menuOrder'   => $attachment->menu_order,
        'mime'        => $attachment->post_mime_type,
        'type'        => $type,
        'subtype'     => $subtype,
        'icon'        => wp_mime_type_icon( $attachment->ID ),
        'dateFormatted' => mysql2date( get_option('date_format'), $attachment->post_date ),
        'nonces'      => array(
            'update' => false,
            'delete' => false,
            'edit'   => false
        ),
        'editLink'   => false,
        'meta'       => false,
    );

Ceci est particulièrement utile (comme son nom l'indique) pour envoyer la méta de l'image de pièce jointe à une vue wp.media via wp_send_ajax(), mais cela ne signifie pas que vous ne pouvez pas l'utiliser à d'autres fins.

J'aime faire abstraction du champ _wp_attachment_image_alt post meta, au cas où la méthode de récupération du texte de remplacement changerait (peu probable, mais envisageable).

J’estime cependant qu’il existe un cas pour une méthode wp_get_attachment_image_alt().

5
Tom Auger

La réponse de Mike est correcte, bien sûr, mais $alt_text = get_post_meta($post->ID, '_wp_attachment_image_alt', true); peut renvoyer une chaîne vide.

wp_get_attachment_image , cependant, obtient toujours un alt_text.

L'équipe Wordpress applique l'astuce suivante en vérifiant d'abord le post_except, puis en obtenant le titre.

if(empty($alt_text)) // If not, Use the Caption
{
    $attachment = get_post($post->ID);
    $alt_text = trim(strip_tags( $attachment->post_excerpt ));
}
if(empty($alt_text)) // Finally, use the title
{ 
    $attachment = get_post($post->ID);
    $alt_text = trim(strip_tags( $attachment->post_title )); 
}
4
GUI Junkie

J'ai découvert que le texte Alt des pièces jointes était stocké dans une méta personnalisée appelée "_wp_attachment_image_alt".

Donc, ayant l'identifiant de la pièce jointe, j'ai pu obtenir le texte alternatif avec ce code:

<?php echo get_post_meta($attachment_id, '_wp_attachment_image_alt', true) ?>
2
chilljul

Si vous utilisez WP_Customize_Media_Control (), votre get_theme_mod () renverra l'ID de publication, mais si vous utilisez le nouveau WP_Customize_Image_Control (), get_theme_mod () retournera l'URL de l'image, ce qui m'a permis d'obtenir le texte alt à l'aide de WP_Customize_Image ()

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>
0
DevTurtle

Pour ajouter à la réponse de Mike, cela pourrait être utile. Vous devrez peut-être obtenir l'ID spécifique de la pièce jointe. Vous pouvez donc le faire en transmettant l'ID de publication à l'exemple get_post_thumbnail_id:

  $the_img = wp_get_attachment_image( get_post_thumbnail_id( get_the_ID() ) );
0
Uriahs Victor