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

Вопрос или проблема

Я хочу получить все размеры вложения. Я могу использовать 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 вложения

  1. Получение ID вложения
    Предположим, что у вас уже есть ID вложения. Если вы работаете с таксономиями, вы можете получить его, используя следующую строку кода:

    $attachment_id = get_term_meta($term->term_id, 'thumbnail_id', true);
  2. Получение метаданных вложения
    Затем вы можете использовать функцию wp_get_attachment_metadata, чтобы получить метаданные для этого вложения:

    $image_metadata = wp_get_attachment_metadata($attachment_id);
  3. Получение полного пути к файлу
    Чтобы получить полный путь к файлу, вы можете использовать функцию get_attached_file:

    $image_path = get_attached_file($attachment_id);
  4. Получение базового URL для загрузок
    Следующим шагом будет получение базового URL для загрузок с помощью wp_upload_dir:

    $upload_dir = wp_upload_dir();
  5. Составление полного 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.

Оцените материал
Добавить комментарий

Капча загружается...