it-swarm-es.com

¿Cómo recuperar el texto alternativo de un archivo adjunto de imagen?

Estoy usando un archivo attachment.php para mostrar versiones grandes de imágenes en las que se ha hecho clic en otra parte. Me gustaría tirar el texto alternativo de la imagen como título en la imagen con javascript, pero el texto alternativo no se incluye cuando se usa wp_get_attachment_image_src (). No creo que WP tenga una función para recuperarla, así que necesito la mía. Para escribir esa función, necesito saber ... ¿Dónde se almacena el texto alternativo de una imagen?

Mi página de adjuntos usa wp_get_attachment_image_src(), que no incluye el texto alternativo.

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

Esta espectáculos:

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

Soy consciente de que se llama al $post->post_excerpt en el código anterior, pero no estoy seguro de con qué reemplazarlo para obtener el atributo alt de la imagen.

32
kevtrout

Hace poco investigué para un proyecto de un cliente recientemente, así que lo-y-mira ¡Lo uso aquí!

Después del texto, verá una lista categorizada de la mayoría (¿todas?) De las funciones de manejo de imágenes desde WordPress 3.0.1 (las agrupé en cierta apariencia de orden pero no pongo demasiada credibilidad en mi categorización).

De todos modos,respondiendo a lo que (creo) que necesitas en lugar de a lo que pediste(bueno, también responderé eso, al final) Creo lo que necesita es la función wp_get_attachment_image() que devolverá una cadena HTML que contiene estos atributos:

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

Funciones de manejo de imágenes de WordPress 3.0

Así que aquí están las funciones de manejo de imágenes de WordPress para su referencia y la de otros (vaya abajo para la respuesta a su pregunta exacta):

Soporte de imagen/miniaturas

Adjunto archivo

Tipos mime

Subidas

Sistema de archivos

HTML

Manejo de imágenes de bajo nivel:


Como se prometió, el texto'alt' de la imagen se almacena como una cadena en wp_postmeta con la meta_key de '_wp_attachment_image_alt'.

Como probablemente ya sepa, puede cargarlo con una simple get_post_meta() así:

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

53
MikeSchinkel

Considere mirar wp_prepare_attachment_for_js( $attachment ), donde $attachment es el objeto WP_Post del archivo adjunto.

Esto es un poco como una función de "fregadero de cocina", pero proporciona un hash muy agradable con una tonelada de metadatos, incluyendo '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,
    );

Esto es particularmente útil (como su nombre lo indica), para enviar el meta de la imagen adjunta a una vista de wp.media mediante wp_send_ajax(), pero eso no significa que no pueda usarlo para otros fines.

Me gusta abstraer del campo meta de _wp_attachment_image_alt post, en caso de que el método para recuperar el texto alternativo cambie alguna vez (es poco probable, pero es posible).

Sin embargo, siento que hay un caso para un método de wp_get_attachment_image_alt().

5
Tom Auger

Mike's answer es correcto, por supuesto, pero $alt_text = get_post_meta($post->ID, '_wp_attachment_image_alt', true); puede devolver una cadena vacía.

wp_get_attachment_image , sin embargo, siempre obtiene un alt_text.

El equipo de Wordpress aplica el siguiente truco, primero, verificando post_except y luego obteniendo el título.

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

Descubrí que el texto Alt para los archivos adjuntos se almacenó en un meta personalizado llamado "_wp_attachment_image_alt"

Entonces, al tener la ID del archivo adjunto, pude obtener el texto alternativo con este código:

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

Si está usando WP_Customize_Media_Control (), su get_theme_mod () devolverá el ID de publicación, pero si está usando el nuevo WP_Customize_Image_Control (), el get_theme_mod () le devolverá la url de la imagen. ()

Aquí es cómo pude hacerlo. Espero que esto ayude a alguien por ahí

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

Para agregar a la respuesta de Mike, alguien podría encontrar esto útil. Es posible que necesite obtener la ID específica del archivo adjunto, por lo que puede hacerlo pasando la ID de publicación a get_post_thumbnail_id ejemplo:

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