Как получить атрибуты title/alt изображения?

1 июл. 2015 г., 16:49:50
Просмотры: 174K
Голосов: 36

В моей светлой теме не настроен атрибут alt для слайдера на главной странице. Я добавил alt-текст для изображения через интерфейс медиабиблиотеки. Я добавил следующий код для отображения alt-текста/атрибута, но он не отображается:

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

Вот код:

<?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 )) {
      // Если alt пустой, используем заголовок
      $image_alt = $attachment->post_title;
    }
    if ( empty( $image_alt )) {
      // Если заголовок пустой, используем подпись
      $image_alt = $attachment->post_excerpt;
    }
    // Получаем заголовок изображения
    $image_title = $attachment->post_title;
    $image_id = $image->id;
    // Получаем URL изображения
    $image = wp_get_attachment_image_src( $image_id, 'blog-huge', false);
    // Выводим тег изображения с alt
    echo '<img class="homepage-slider_image" src="'.$image[0].'" alt="'. $image_alt .'" />';
  }
?>
3
Комментарии

Вы пытаетесь получить метаданные записи для $attachment->ID, но я не вижу информации об объекте $attachment в вашем коде.

cybmeta cybmeta
1 июл. 2015 г. 16:56:53

@cybmeta я взял этот фрагмент кода отсюда http://wordpress.stackexchange.com/questions/185396/getting-the-image-title-alt-attribute-from-the-gallery-shortcode

Nisha_at_Behance Nisha_at_Behance
1 июл. 2015 г. 17:06:46

Вы также можете использовать плагины, такие как: 1) https://wordpress.org/plugins/imageseo/ 2) https://wordpress.org/plugins/auto-image-attributes-from-filename-with-bulk-updater/ 3) https://wordpress.org/plugins/auto-image-alt/ Надеюсь, это поможет!

James James
24 февр. 2020 г. 18:27:33
Все ответы на вопрос 6
0
65

Для получения атрибутов alt и title изображения достаточно только его ID (идентификатора вложения).

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

В качестве бонуса - вот как получить src изображения. Вместе с вышеуказанными атрибутами этого достаточно для формирования статической разметки изображения.

$size = 'my-size' // По умолчанию 'thumbnail', если не указано.

$image_src = wp_get_attachment_image_src($image_id, $size)[0];
4 мар. 2019 г. 13:41:27
0
30

Ваша проблема заключается в том, что вы не передаёте правильный ID вложения в функции get_post_meta() и get_the_title().

Вот ваш код для получения атрибута alt изображения:

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

Он правильный, но переменная $attachment->ID не определена в вашем коде, поэтому функция ничего не возвращает.

Исходя из вашего кода, похоже, что вы сохраняете ID изображения как мета-поле и затем получаете его этим кодом:

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

Итак, предполагая, что $image->id в вашем коде корректен, вам следует заменить это:

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

На это:

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

Это для получения атрибута alt, а для получения заголовка:

$image_title = get_the_title( $image->id );
1 июл. 2015 г. 17:41:31
0

Я использую быструю функцию во всех своих темах для получения данных вложения изображения:

//получить метаданные вложения
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
        );
    }
}

Надеюсь, это будет полезно!

29 янв. 2019 г. 18:41:22
0
$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('Отсутствует заголовок','{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 . '" />';

}

Обратите внимание, что я не проверял ваш $image->id, просто предположил, что у вас правильный ID вложения. Остальное берется из $img_meta. Если отсутствует alt, мы используем заголовок изображения, если заголовок отсутствует, вы увидите текст "Отсутствует заголовок", чтобы напомнить вам заполнить его.

2 янв. 2017 г. 18:41:44
0

Окей, я нашел ответ, которого ни у кого нет в сети, я искал его несколько дней. Имейте в виду, что это работает только если ваша тема или плагин использует WP_Customize_Image_Control(). Если вы используете WP_Customize_Media_Control(), то get_theme_mod() вернет ID, а не URL.

В моем случае я использовал более новую версию WP_Customize_Image_Control().

Много постов на форумах предлагают использовать get_attachment_id(), который больше не работает. Я использовал attachment_url_to_postid().

Вот как я смог это сделать. Надеюсь, это поможет кому-то.

// Получаем URL изображения
$feature1 = get_theme_mod('feature_image_1');

// Получаем ID поста
$feature1_id = attachment_url_to_postid($feature1);

// Получаем ALT-текст изображения, установленный в медиабиблиотеке
$image1_alt = get_post_meta( $feature1_id, '_wp_attachment_image_alt', true );

Разметка

<a href="<?php echo $feature1_url; ?>"><img class="img-responsive center-block" src="<?php echo $feature1; ?>" alt="<?php echo $image1_alt; ?>"></a>
29 апр. 2017 г. 05:30:38
0

По-настоящему WordPress-овым решением будет использование предоставленной функции get_image_tag() для получения HTML-тега изображения, передавая в функцию id и alt в качестве аргументов. Другие ответы уже объясняют, как получить атрибут alt.

Эта функция также автоматически обрабатывает атрибуты srcset и sizes, которые вам в противном случае пришлось бы указывать вручную с помощью wp_get_attachment_image_srcset, чтобы обеспечить современную браузерную оптимизацию загрузки изображений.

8 апр. 2021 г. 17:00:37