¿Cómo obtener el título de la imagen / atributo alt?

17

En mi tema blanco, no hay un atributo alt configurado para la publicación del control deslizante de inicio. Agregué el texto alternativo para la imagen a través de la interfaz de la biblioteca de medios. Agregué el siguiente código para mostrar el texto / atributo alternativo. Pero no muestra:

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

Aquí está el código:

<?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
fuente
1
Estás tratando de obtener la meta meta de la publicación, $attachment->IDpero no puedo ver ninguna información sobre el $attachmentobjeto en tu código.
cybmeta 01 de
@cybmeta tengo este fragmento de código desde aquí wordpress.stackexchange.com/questions/185396/…
Nisha_at_Behance
También puede usar complementos como 1) wordpress.org/plugins/imageseo 2) wordpress.org/plugins/… 3) wordpress.org/plugins/auto-image-alt ¡Espero que ayude!
James

Respuestas:

17

Vine aquí ya que esta publicación se encuentra entre los principales éxitos en el motor de búsqueda cuando buscaba el título y la imagen alternativa de WordPress. Al estar bastante sorprendido de que ninguna de las respuestas parezca proporcionar una solución simple que coincida con el título de la pregunta, dejaré lo que se me ocurrió al final con la esperanza de que ayude a los futuros lectores.

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

Como beneficio adicional, aquí se explica cómo recuperar una imagen src Con los atributos anteriores, eso es todo lo que necesitamos para construir el marcado de una imagen estática.

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

$image_src = wp_get_attachment_image_src($image_id, $size)[0];
leymannx
fuente
No entiendo la diferencia en tu respuesta y las demás. El problema en la pregunta era que la ID del archivo adjunto no era correcta, y esa es la respuesta. Además, en su respuesta, obtiene la ID para la miniatura de la publicación actual, pero no para el archivo adjunto deseado. entonces no responde / resuelve la pregunta del OP.
cybmeta
De dónde obtiene su identificación de imagen depende de usted. Pero gracias por el voto negativo de todos modos. Especialmente amable de tu parte pegar mi respuesta en la tuya.
leymannx
25

Su problema es que no está proporcionando la identificación get_post_meta()y las get_the_title()funciones del archivo adjunto correcto .

Este es su código para obtener altla imagen:

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

Y es correcto, pero $attachment->IDno está definido en su código, por lo tanto, la función no devuelve nada.

Al leer su código, parece que almacena el ID de la imagen como un metacampo y luego lo obtiene con este código:

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

Entonces, suponiendo que $image->idsea ​​correcto en su código, debe reemplazar esto:

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

Con:

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

Eso es para obtener el alt, para obtener el título:

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

Utilizo una función rápida en todos mis temas para obtener datos de archivos adjuntos de imágenes:

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

¡Espero que esto ayude!

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

}

tenga en cuenta que no probé su $image->id, solo asumí que tiene el ID de archivo adjunto correcto. El resto viene de $img_meta. Si falta alt, estamos usando el título de la imagen, si falta el título, verá el texto "Título faltante" para empujarlo a completarlo.

Benn
fuente
2

Ok, encontré la respuesta que nadie tiene en la red que he estado buscando durante días. Tenga en cuenta que esto solo funciona si su tema o complemento está utilizando WP_Customize_Image_Control () si está utilizando WP_Customize_Media_Control (), get_theme_mod () devolverá la ID y no la url.

Para mi solución, estaba usando la versión más reciente WP_Customize_Image_Control ()

Muchas publicaciones en los foros tienen get_attachment_id () que ya no funciona. Usé attach_url_to_postid ()

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