Вопрос или проблема
Я хочу получить все размеры вложения. Я могу использовать wp_get_attachment_metadata для этого. Но это возвращает только имена файлов, а не URL файлов.
Как я могу это сделать?
Это обходное решение, но не учитывает такие вещи, как CDN:
$attachment_id = get_term_meta( $term->term_id, 'thumbnail_id', true);
$image = wp_get_attachment_metadata($attachment_id);
$image['id'] = $attachment_id;
foreach($image['sizes'] as $key => $image_size) {
$image['sizes'][$key]['url'] = wp_upload_dir()['baseurl'] . "https://wordpress.stackexchange.com/" . dirname($image['file']) . "https://wordpress.stackexchange.com/" . $image_size['file'];
}
Как только у вас уже есть ID вложения, вы можете получить полный путь с помощью get_attached_file:
$image_path = get_attached_file( $attachment_id );
Ответ или решение
Чтобы получить полный URL для всех размеров вложения в WordPress, вы можете использовать комбинацию функций wp_get_attachment_metadata
, get_attached_file
и wp_upload_dir
. Тем не менее, достаточно важно учитывать, что wp_get_attachment_metadata
возвращает только имена файлов, а не их полные URL. Для решения данной задачи необходимо несколько модифицировать ваш подход.
Шаги по получению полного URL вложения
-
Получение ID вложения
Предположим, что у вас уже есть ID вложения. Если вы работаете с таксономиями, вы можете получить его, используя следующую строку кода:$attachment_id = get_term_meta($term->term_id, 'thumbnail_id', true);
-
Получение метаданных вложения
Затем вы можете использовать функциюwp_get_attachment_metadata
, чтобы получить метаданные для этого вложения:$image_metadata = wp_get_attachment_metadata($attachment_id);
-
Получение полного пути к файлу
Чтобы получить полный путь к файлу, вы можете использовать функциюget_attached_file
:$image_path = get_attached_file($attachment_id);
-
Получение базового URL для загрузок
Следующим шагом будет получение базового URL для загрузок с помощьюwp_upload_dir
:$upload_dir = wp_upload_dir();
-
Составление полного URL для каждого размера
Наконец, используя полученные метаданные и базовый путь, вы можете создать полный URL для каждого размера изображения. Ваш код может выглядеть следующим образом:foreach ($image_metadata['sizes'] as $key => $size) { $image_metadata['sizes'][$key]['url'] = $upload_dir['baseurl'] . '/' . dirname($image_metadata['file']) . '/' . $size['file']; }
Полный пример кода
Вот полный пример, который иллюстрирует вышеупомянутые шаги:
$attachment_id = get_term_meta($term->term_id, 'thumbnail_id', true);
$image_metadata = wp_get_attachment_metadata($attachment_id);
$image_metadata['id'] = $attachment_id;
$image_path = get_attached_file($attachment_id);
$upload_dir = wp_upload_dir();
foreach ($image_metadata['sizes'] as $key => $size) {
$image_metadata['sizes'][$key]['url'] = $upload_dir['baseurl'] . '/' . dirname($image_metadata['file']) . '/' . $size['file'];
}
// Теперь вы можете использовать $image_metadata['sizes'] с заполненными URL
Важно учитывать
- CDN и другие пути: Если вы используете CDN, например, вы должны изменять базовый URL, чтобы он соответствовал вашему CDN.
- Безопасность: Убедитесь, что ваши функции и данные надежны и безопасны.
Следуя данным шагам, вы сможете обеспечить получение всех размеров изображения с полными URL, что позволит вам лучше управлять изображениями в вашей среде WordPress.