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

32

Estoy usando un archivo adjunto.php para mostrar versiones grandes de imágenes en las que se ha hecho clic en otro lugar. Me gustaría extraer el texto alternativo de la imagen como un título debajo de 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 recuperarlo, así que necesito la mía. Para escribir esa función, necesito saber ... ¿Dónde está almacenado el texto alternativo para una imagen?

Mi página de archivos 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 $post->post_excerptse está llamando en el código anterior, pero no estoy seguro de qué reemplazarlo para obtener el atributo alt de la imagen.

kevtrout
fuente

Respuestas:

53

Recientemente he hecho un poco de investigación para un proyecto de cliente recientemente así lo-y-he aquí que llego a usarlo 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 un orden similar pero no creí demasiado en mi categorización).

De todos modos, respondiendo lo que (creo) que necesita en lugar de lo que pidió ( está bien, responderé eso también, al final ) Creo que lo que necesita es la wp_get_attachment_image()función 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 ( salte a continuación para obtener la respuesta a su pregunta exacta ):

Soporte de imagen / Miniaturas

Adjunto archivo

Tipos MIME

Subidas

Sistema de archivos

HTML

Manejo de imagen de bajo nivel:


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

Como probablemente ya sepa, puede cargarlo de una manera simple get_post_meta():

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

MikeSchinkel
fuente
1
Bueno, no puedo evitar ayudar a sentirme un poco tonto ahora que lo has dicho. Lo he usado wp_get_attachment_imgage()antes y lo olvidé por completo. Tienes razón sobre lo que pensé que realmente necesitaba. Gracias por la info. También tienes razón sobre dónde está almacenado el meta meta ... Miré en ese mismo lugar, pero me evadió a pesar de que debía haber estado mirándolo directamente. Eso es lo que obtengo por entrar al final del día. ¡Gracias de nuevo!
kevtrout
Oye no hay problema He hecho algunas preguntas realmente obvias en el pasado reciente también en la lista de hackers solo para que la respuesta sea notoriamente obvia en cuanto alguien la mencione. Es fácil perderse algo aquí o allá. Pero el beneficio real de WordPress Answers es que cada pregunta y respuesta se convierte en un recurso para otros con preguntas similares en el futuro. ¡Incluso espero que busque en Google lo que respondí, pero lo olvidé en el futuro!
MikeSchinkel
1
Pregunta rápida: indicó que wp_get_attachment_image()devuelve una matriz de la imagen src y los atributos. Parece que solo devuelve html que contiene la imagen y sus atributos. Todavía hace el trabajo, simplemente no sabía si sabía algo que no estaba en la función ref: codex.wordpress.org/Function_Reference/wp_get_attachment_image
kevtrout
1
@ Mike: solo un recordatorio rápido para actualizar la nota sobre wp_get_attachment_image como una matriz, lo que me dejó un poco perplejo :). Excelente respuesta de lo contrario!
Jonathan Wold
1
Respuesta muy detallada, bien hecho!
Bas van Dijk
5

Considere mirar wp_prepare_attachment_for_js( $attachment )dónde $attachmentestá el objeto WP_Post del archivo adjunto.

Esta es una función de "fregadero de cocina", pero proporciona un hash muy agradable con una tonelada de metadatos, que incluye '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 metadato de la imagen adjunta a una vista de wp.media vía wp_send_ajax(), pero eso no significa que no pueda usarlo para otros fines.

Me gusta abstraerme del _wp_attachment_image_altcampo meta meta, en caso de que el método para recuperar el texto alternativo cambie (improbable, pero concebible).

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

Tom Auger
fuente
Exactamente lo que estaba buscando. ¿Alguien tiene una idea de su rendimiento? Con tantos valores diferentes recupera ... Me pregunto ...
Larzan
@Larzan No me preocuparía por el rendimiento, a menos que obtenga cientos de datos de imágenes al mismo tiempo ...
Tom Auger
4

La respuesta de Mike es correcta, 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 )); 
}
GUI Junkie
fuente
2

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

Entonces, teniendo el 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) ?>
chilljul
fuente
0

Si está utilizando WP_Customize_Media_Control () su get_theme_mod () devolverá la identificación de la publicación, pero si está utilizando el nuevo WP_Customize_Image_Control (), get_theme_mod () devolverá la url de la imagen, así fue como pude obtener el texto alternativo usando el WP_Customize_Image_Control ()

Así es como 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 );

Margen

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

Para agregar a la respuesta de Mike, alguien puede 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 al get_post_thumbnail_idejemplo:

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