Як отримати атрибут title / alt зображення?


17

У моїй білій темі немає атрибута 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 )) {
      $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 .'" />';
  }
?>

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 Я сподіваюся, що це допоможе!
Джеймс

Відповіді:


18

Прийшов сюди, оскільки ця публікація входить до числа найкращих хітів у пошуковій системі, шукаючи альт та заголовок зображення 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];

Я не розумію різниці у вашій відповіді та інших. Проблема в питанні полягала в тому, що ідентифікатор вкладення не був правильним, і це відповідь. Крім того, у своїй відповіді ви отримуєте ідентифікатор для мініатюри поточної публікації, але не для потрібного вкладення. тому він не відповідає / не вирішує питання про ОП.
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 );

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. Якщо альт відсутній, ми використовуємо заголовок зображення, якщо заголовок відсутній, ви побачите текст "Відсутній заголовок", щоб натиснути на нього, щоб заповнити його.


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>
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.