Я поделился своим решением здесь, потому что я видел этот пост, исследуя решение для аналогичной проблемы: я искал решение, чтобы получить атрибут srcset и полный сгенерированный тег 'img', но из 'media 'объект, возвращаемый компонентом MediaReplaceFlow (не только по идентификатору вложения). Вероятно, его можно адаптировать к вашей проблеме, получая медиа-объект с wp.data.select( 'core').getMedia(media_id)
.
. Этот медиа-объект уже содержит массив размеров с URL-адресом изображения в некоторых размерах изображения. но этого недостаточно, потому что сложно создать атрибут srcset и size для тега image. Итак, после многих исследований я нашел очень полезный фильтр php: wp_prepare_attachment_for_js
, поэтому с этим фильтром я написал PHP код:
function imageTagForJs( $response, $attachment ) {
foreach ( $response['sizes'] as $size => $datas ) {
$response['sizes'][$size]['tag'] = wp_get_attachment_image( $attachment->ID, $size );
$response['sizes'][$size]['srcset'] = wp_get_attachment_image_srcset( $attachment->ID, $size );
}
return $response;
}
add_filter( 'wp_prepare_attachment_for_js', 'imageTagForJs', 10, 2 );
Теперь в объекте 'media' JS каждый размер получает два новых свойства: tag и srcset. Теперь я могу получить свой тег img в js, просто используя media.sizes.medium.tag
.
Важно: По умолчанию массив media.sizes содержит только встроенные размеры изображений (миниатюра, средний и т. Д.). c), но не нестандартные размеры изображений. Вы можете просто добавить нестандартные размеры, используя фильтр image_size_names_choose
.