Як отримати текст Alt тексту вкладеного зображення?


32

Я використовую файл attach.php, щоб показати великі версії зображень, натиснуті в інших місцях. Я хотів би витягнути текст alt зображення як підпис під зображенням з JavaScript, але текст alt не включається, коли використовується wp_get_attachment_image_src (). Я не думаю, що у WP є функція її отримання, тому мені потрібна своя. Щоб написати цю функцію, мені потрібно знати ... Де зберігається текст alt для зображення?

Моя сторінка вкладених файлів використовує wp_get_attachment_image_src(), що не включає текст alt.

<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 зображення.

Відповіді:


53

Нещодавно я нещодавно робив дослідження для клієнтського проекту ось-ось я його тут використовую!

Після тексту ви побачите категоризований список більшості (всіх?) Функцій обробки зображень з 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);


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

Я відчуваю, що існує wp_get_attachment_image_alt()метод для методу.


Саме те, що я шукав. Хтось має уявлення про його виконання? Маючи стільки різних значень, що це витягує ... Цікаво ...
Ларзан

@Larzan Я б не хвилювався з приводу продуктивності - якщо ви не отримаєте сотні зображень одночасно ...
Tom Auger

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

2

Я дізнався, що текст Alt для вкладених файлів зберігався на спеціальній мета під назвою "_wp_attachment_image_alt"

Отже, маючи Id вкладеного файлу, я зміг отримати текст alt з цим кодом:

<?php echo get_post_meta($attachment_id, '_wp_attachment_image_alt', true) ?>

0

Якщо ви використовуєте WP_Customize_Media_Control (), ваш get_theme_mod () поверне ідентифікатор публікації, але якщо ви використовуєте новий WP_Customize_Image_Control (), get_theme_mod () поверне URL-адресу зображення, тому я зміг отримати альт-текст із використанням WP_Customize ()

Ось як мені вдалося це зробити. Сподіваюся, це допомагає комусь там

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

Щоб додати відповідь Майка, хтось може вважати це корисним. Можливо, вам знадобиться отримати конкретний ідентифікатор вкладеного файлу, так що це можна зробити, передавши get_post_thumbnail_idприклад ідентифікатора на приклад:

  $the_img = wp_get_attachment_image( get_post_thumbnail_id( get_the_ID() ) );
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.