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

17

В моей белой теме нет атрибута 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 )) {
      $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
источник
1
Вы пытаетесь получить метаданные сообщения, $attachment->IDно я не вижу никакой информации об $attachmentобъекте в вашем коде.
Cybmeta
@cybmeta Я получил этот фрагмент кода здесь wordpress.stackexchange.com/questions/185396/…
Nisha_at_Behance
Вы также можете использовать плагины, такие как 1) wordpress.org/plugins/imageseo 2) wordpress.org/plugins/… 3) wordpress.org/plugins/auto-image-alt Я надеюсь, что это поможет!
Джеймс

Ответы:

17

Пришел сюда, так как этот пост является одним из лучших хитов в поисковой системе при поиске изображения и заголовка WordPress. Будучи довольно удивленным, что ни один из ответов не дает простого решения, соответствующего названию вопроса, я опущу то, что придумал, в конце концов, надеясь, что это поможет будущим читателям.

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

В качестве бонуса вот как получить изображение SRC. С помощью вышеуказанных атрибутов это все, что нам нужно для создания разметки статического изображения.

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

$image_src = wp_get_attachment_image_src($image_id, $size)[0];
leymannx
источник
Я не понимаю разницы в вашем ответе и других. Проблема в вопросе заключалась в том, что идентификатор вложения был неправильным, и это ответ. Кроме того, в своем ответе вы получите идентификатор для эскиза текущего сообщения, но не для желаемого вложения. поэтому он не отвечает / не решает вопрос ОП.
Cybmeta
Откуда вы получите свой идентификатор изображения, зависит от вас. Но все равно спасибо за отрицание. Особенно мило с твоей стороны вставить мой ответ в свой.
Leymannx
25

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

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

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

И это правильно, но $attachment->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 );
cybmeta
источник
4

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

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

Надеюсь это поможет!

Дарио Задро
источник
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 . '" />';

}

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

Бенн
источник
2

Хорошо, я нашел ответ, которого ни у кого нет в сети, которую я искал несколько дней. Помните, это работает, только если ваша тема или плагин использует WP_Customize_Image_Control (), если вы используете WP_Customize_Media_Control (), get_theme_mod () вернет идентификатор, а не URL.

Для моего решения я использовал более новую версию WP_Customize_Image_Control ()

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

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

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

наценка

<a href="<?php echo $feature1_url; ?>"><img class="img-responsive center-block" src="<?php echo $feature1; ?>" alt="<?php echo $image1_alt; ?>"></a>
DevTurtle
источник