kevtrout
  • 0
Эксперт

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

  • 0

Я использую файл attachment.php, чтобы показать большие версии изображений, которые были нажаты в другом месте. Я хотел бы вытащить замещающий текст изображения в качестве подписи под изображением с помощью javascript, но замещающий текст не включается, когда используется 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 изображения.

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

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

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

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

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

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

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

    Вложение

    MIME-типы

    Загрузки

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

    HTML

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


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

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

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

    • 0
    • Ну, я не могу не чувствовать себя немного одурманенным после того, как ты это сказал. Раньше пользовался wp_get_attachment_imgage() и совсем про него забыл. Вы правы насчет того, что, как вы думали, мне действительно нужно. Спасибо за информацию. Вы также правы насчет того, где хранится альтернативная мета… Я смотрел именно в это место, но оно ускользнуло от меня, хотя я, должно быть, смотрел прямо на него. Вот что я получаю за то, что вхожу в него в конце дня. Спасибо еще раз!

      • 0
    • Эй, нет проблем. В недавнем прошлом я тоже задавал несколько действительно очевидных вопросов в списке хакеров только для того, чтобы ответ был очевиден, как только кто-то упомянул об этом. Здесь или там легко что-то пропустить. Но настоящее преимущество ответов WordPress заключается в том, что каждый вопрос и ответ становятся ресурсом для других людей с похожими вопросами в будущем. Я даже ожидаю, что буду гуглить, что я ответил, но забыл в будущем!

      • 0
    • Быстрый вопрос: вы указали, что wp_get_attachment_image() возвращает массив изображения src и атрибутов. Кажется, он возвращает только html, содержащий изображение и его атрибуты. По-прежнему выполняет свою работу, просто не знал, знали ли вы о чем-то, кроме ссылки на функцию: codex.wordpress.org/Function_Reference/wp_get_attachment_image

      • 0
    • @Mike — Просто быстрое напоминание обновить примечание о wp_get_attachment_image как массиве — это меня немного озадачило :). В противном случае отличный ответ!

      • 0
    • Очень подробный ответ, молодец!

      • 0
    • Именно то, что я искал. Кто-нибудь имеет представление о его производительности? С таким количеством разных значений, которые он извлекает… Интересно…

      • 0
    • @Larzan Я бы не стал беспокоиться о производительности — если только вы не получаете данные сотен изображений одновременно…

      • 0
  2. Посмотрите на 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 через wp_send_ajax(), но это не означает, что вы не можете использовать его для других целей.

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

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

    • 0
  3. Ответ Майка, конечно, правильный, но $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 )); 
    }
    
    • 0
  4. Я обнаружил, что альтернативный текст для вложений был сохранен в пользовательской мете под названием «_wp_attachment_image_alt».

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

    <?php echo get_post_meta($attachment_id, '_wp_attachment_image_alt', true) ?>
    
    • 0
  5. Чтобы добавить к ответу Майка, кто-то может найти это полезным. Возможно, вам потребуется получить конкретный идентификатор вложения, поэтому вы можете сделать это, передав идентификатор сообщения в get_post_thumbnail_id пример:

      $the_img = wp_get_attachment_image( get_post_thumbnail_id( get_the_ID() ) );
    
    • 0
  6. Если вы используете 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>
    
    • 0

Оставить ответ

You must login to add an answer.