Как получить все изображения из медиа-галереи?
Существует ли способ получить URL-адреса ВСЕХ изображений из медиа-галереи?
Я думаю, это был бы простой способ создать на сайте страницу с изображениями, которая просто извлекает все изображения из медиа-галереи, хотя это может быть необходимо только в определенных сценариях.
Мне не нужны инструкции по созданию страницы с изображениями, только способ получить все URL-адреса изображений. Спасибо!

$query_images_args = array(
'post_type' => 'attachment',
'post_mime_type' => 'image',
'post_status' => 'inherit',
'posts_per_page' => - 1,
);
$query_images = new WP_Query( $query_images_args );
$images = array();
foreach ( $query_images->posts as $image ) {
$images[] = wp_get_attachment_url( $image->ID );
}
Все URL изображений теперь находятся в переменной $images
;

Хм.. похоже, @somatic опередил меня. В отличие от его решения выше, мой вариант будет получать только изображения.

Очевидно, наши методы похожи... и azizur прав, добавление 'post_mime_type' в любой запрос позволит ограничить типы возвращаемых файлов.
Важно учесть: guid часто содержит полный URL изображения, но это ненадёжный источник. Он статичен, генерируется только один раз при создании записи и строится на основе текущего URL сайта и структуры папок медиафайлов. Но эта структура папок и домен могут измениться со временем, и тогда guid больше не будет соответствовать реальному URL изображения, а останется лишь записью того, каким он был при создании...

Этот ответ НЕВЕРНЫЙ. Он не получает изображения из Медиатеки. Он находит только изображения, используемые внутри записей. Неиспользуемые изображения не будут найдены!

@Christian - это неправильно? Или мне стоит спросить 'всё ещё' неправильно? Я понимаю, что комментирую почти через 2 года, но я попробовал это на WP 3.6 и получаю изображения, которые только что добавил в медиатеку, не прикрепляя их к каким-либо записям :/

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

@FrederikWitte вы можете комбинировать get_intermediate_image_sizes и wp_get_attachment_image_src, чтобы получить все URL-адреса.

Немного контекста - этот ответ НЕ ОШИБОЧНЫЙ. WordPress хранит данные загрузок в таблице wp_posts
как пользовательский тип записи attachment
каждый раз, когда вы что-то загружаете, независимо от того, используется это где-то или нет.

Просто интересно, каково назначение post_status
? Мой код работает только если я устанавливаю post_status
в inherit
. Однако вложение, которое я ищу (в моем случае PDF-файл), не было загружено ни на одну страницу. От чего тогда оно наследуется? И почему я не могу просто игнорировать post_status?

Не работает у меня... Я использую этот рабочий код:
Как показать все медиа-изображения WordPress на странице https://www.arnlweb.com/forums/web-development/how-to-get-all-images-in-a-wordpress-page-from-media-gallery/

$media_query = new WP_Query(
array(
'post_type' => 'attachment',
'post_status' => 'inherit',
'posts_per_page' => -1,
)
);
$list = array();
foreach ($media_query->posts as $post) {
$list[] = wp_get_attachment_url($post->ID);
}
// здесь можно что-то сделать с массивом $list;
Запрос к базе данных для получения всех элементов медиабиблиотеки (не только прикрепленных к записям), извлечение их URL-адресов и сохранение в массив $list
.

<?php
// Получаем все вложения (изображения) для текущего поста/страницы
$attachments = get_children( array('post_parent' => get_the_ID(), 'post_type' => 'attachment', 'post_mime_type' =>'image') );
// Перебираем все полученные вложения
foreach ( $attachments as $attachment_id => $attachment ) {
// Выводим изображение с размером 'medium'
echo wp_get_attachment_image( $attachment_id, 'medium' );
}
?>
Этот код получает все вложения (изображения) для поста/страницы. Если вы добавите больше изображений к посту, они будут отображаться в списке.

ок, я использовал этот код для отображения ВСЕХ изображений в медиатеке!
$args = array(
'post_type' => 'attachment',
'post_status' => 'published',
'posts_per_page' =>25,
'post_parent' => 210, // ID записи;
'numberposts' => null,
);
$attachments = get_posts($args);
$post_count = count ($attachments);
if ($attachments) {
foreach ($attachments as $attachment) {
echo "<div class=\"post photo col3\">";
$url = get_attachment_link($attachment->ID);// получаю _posturl вложения
$img = wp_get_attachment_url($attachment->ID);
$title = get_the_title($attachment->post_parent);//получаю заголовок
echo '<a href="'.$url.'"><img title="'.$title.'" src="'.get_bloginfo('template_url').'/timthumb.php?src='.$img.'&w=350&h=500&zc=3"></a>';
echo "</div>";
}
}
и если вы знаете метод для отображения пагинации, пожалуйста, ответьте.

Это сокращенная версия этого ответа, использующая функции get_posts()
и array_map()
.
$image_ids = get_posts(
array(
'post_type' => 'attachment', // тип записи - вложение
'post_mime_type' => 'image', // MIME-тип - изображение
'post_status' => 'inherit', // статус записи - наследовать
'posts_per_page' => -1, // количество записей - все
'fields' => 'ids', // возвращать только ID
) );
$images = array_map( "wp_get_attachment_url", $image_ids ); // получаем URL вложений

Похоже, что он давно не обновлялся, но плагин Media Library Gallery может быть хорошим примером для начала изучения.
