Как получить альтернативный текст вложения изображения?

32

Я использую файл attachment.php, чтобы показать большие версии изображений, на которые щелкнули в других местах. Я хотел бы вытащить изображение alt-текст как подпись под изображением с помощью javascript, но alt-текст не включается, когда используется wp_get_attachment_image_src (). Я не думаю, что в WP есть функция для ее извлечения, поэтому мне нужна моя собственная. Чтобы написать эту функцию, мне нужно знать ... Где хранится альтернативный текст для изображения?

Моя страница вложения использует wp_get_attachment_image_src(), который не включает альтернативный текст.

<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>

Это показывает:

<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>  

Я знаю, что $post->post_excerptвызывается в приведенном выше коде, но я не уверен, что заменить его, чтобы получить атрибут alt изображения.

kevtrout
источник

Ответы:

53

Недавно я провел некоторое исследование для клиентского проекта, так что вот, я могу использовать его здесь!

После текста вы увидите категоризированный список большинства (всех?) Функций обработки изображений из WordPress 3.0.1 (я сгруппировал их в некотором подобии порядка, но не слишком доверяю своей классификации).

В любом случае, отвечая на то , что (я думаю) вам нужно вместо того, что вы просили ( хорошо, я тоже отвечу в конце ), я думаю, что вам нужна wp_get_attachment_image()функция, которая будет возвращать строку HTML, содержащую эти атрибуты:

  • 'src',
  • 'class',
  • 'alt' а также
  • 'title',

WordPress 3.0 Функции обработки изображений

Итак, вот функции обработки изображений в WordPress для справки ваших и других ( пройдите ниже, чтобы получить ответ на ваш точный вопрос ):

Поддержка изображений / миниатюры

прикрепление

MIME Типы

Загрузки

Файловая система

HTML

Низкоуровневая обработка изображений:


Как и было обещано , 'alt'текст изображения хранится в виде строки в wp_postmetaключе meta_key'_wp_attachment_image_alt' .

Как вы, наверное, уже знаете, вы можете загрузить его с помощью простого get_post_meta():

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

MikeSchinkel
источник
1
Ну, я не могу не чувствовать себя немного взволнованным, когда ты это сказал. Я использовал wp_get_attachment_imgage()раньше и полностью забыл об этом. Ты прав насчет того, что, как ты думал, мне действительно нужно. Спасибо за информацию. Вы также правы насчет того, где хранится альт-мета ... Я посмотрел именно в этом месте, но это ускользнуло от меня, хотя я, должно быть, смотрел прямо на него. Вот что я получаю за то, что вхожу в это в конце дня. Еще раз спасибо!
kevtrout
Эй, нет проблем. Я задал несколько действительно очевидных вопросов в недавнем прошлом и в списке хакеров, чтобы ответ был очевидным, как только кто-то упомянул его. Легко что-то пропустить здесь или там. Но реальная выгода WordPress Ответы - каждый вопрос, и ответ становится ресурсом для других с подобными вопросами в будущем. Я даже ожидаю, что я Google, что я ответил, но забыл в будущем!
MikeSchinkel
1
Быстрый вопрос: вы указали, что wp_get_attachment_image()возвращаете массив изображений src и атрибуты. Кажется, он возвращает только HTML, содержащий изображение и его атрибуты. По-прежнему выполняет свою работу, просто не знал, известно ли вам о чем-то, чего нет в функции ref: codex.wordpress.org/Function_Reference/wp_get_attachment_image
kevtrout
1
@Mike - просто быстрое напоминание об обновлении заметки о wp_get_attachment_image в виде массива - это меня немного озадачило :). Отличный ответ иначе!
Джонатан Уолд
1
Очень подробный ответ, молодец!
Бас ван Дейк
5

Рассмотреть вопрос о wp_prepare_attachment_for_js( $attachment ) , где $attachmentнаходится объект WP_Post самого вложения.

Это немного похоже на функцию «кухонная раковина», но она предоставляет очень хороший хэш с кучей метаданных, включая «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,
    );

Это особенно полезно (как следует из названия) для отправки мета-изображения изображения вложения в wp.media View через wp_send_ajax() , но это не значит, что вы не можете использовать его для других целей.

Мне нравится абстрагироваться от _wp_attachment_image_alt мета-поля post, если метод получения альтернативного текста когда-либо изменяется (маловероятно, но возможно).

Я чувствую, что есть wp_get_attachment_image_alt()способ для метода, однако.

Том Оже
источник
Именно то, что я искал. У кого-нибудь есть представление о его производительности? С таким большим количеством различных значений он получает ... Интересно ...
Ларзан
@Larzan Я бы не стал беспокоиться о производительности - если только вы не получаете сотни данных одновременно ...
Том Оджер
4

Ответ Майка , конечно, правильный, но $alt_text = get_post_meta($post->ID, '_wp_attachment_image_alt', true);может вернуть пустую строку.

Однако wp_get_attachment_image всегда получает alt_text.

Команда Wordpress применяет следующий трюк, сначала проверяя post_except, затем получая заголовок.

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
источник
2

Я обнаружил, что текст Alt для вложений был сохранен в пользовательской мета-версии "_wp_attachment_image_alt"

Таким образом, имея идентификатор вложения, я смог получить альтернативный текст с помощью этого кода:

<?php echo get_post_meta($attachment_id, '_wp_attachment_image_alt', true) ?>
chilljul
источник
0

Если вы используете WP_Customize_Media_Control (), ваш get_theme_mod () вернет идентификатор записи, но если вы используете новый WP_Customize_Image_Control (), get_theme_mod () вернет URL-адрес изображения, так я смог получить альтернативный текст с помощью WP_Customize_Image_Control ()

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

// 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
источник
0

Чтобы добавить к ответу Майка, кто-то может найти это полезным. Возможно, вам потребуется получить конкретный идентификатор вложения, так что вы можете сделать это, передав идентификатор сообщения в get_post_thumbnail_idпример:

  $the_img = wp_get_attachment_image( get_post_thumbnail_id( get_the_ID() ) );
Урия Виктор
источник