Как получить все изображения из медиа-галереи?
Существует ли способ получить 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 Rahman
Очевидно, наши методы похожи... и azizur прав, добавление 'post_mime_type' в любой запрос позволит ограничить типы возвращаемых файлов.
Важно учесть: guid часто содержит полный URL изображения, но это ненадёжный источник. Он статичен, генерируется только один раз при создании записи и строится на основе текущего URL сайта и структуры папок медиафайлов. Но эта структура папок и домен могут измениться со временем, и тогда guid больше не будет соответствовать реальному URL изображения, а останется лишь записью того, каким он был при создании...
somatic
Этот ответ НЕВЕРНЫЙ. Он не получает изображения из Медиатеки. Он находит только изображения, используемые внутри записей. Неиспользуемые изображения не будут найдены!
Christian
@Christian - это неправильно? Или мне стоит спросить 'всё ещё' неправильно? Я понимаю, что комментирую почти через 2 года, но я попробовал это на WP 3.6 и получаю изображения, которые только что добавил в медиатеку, не прикрепляя их к каким-либо записям :/
Chris Kempen
Возможно, глупый вопрос, но как теперь получить разные размеры изображений?
Frederik Witte
@FrederikWitte вы можете комбинировать get_intermediate_image_sizes и wp_get_attachment_image_src, чтобы получить все URL-адреса.
Azizur Rahman
Немного контекста - этот ответ НЕ ОШИБОЧНЫЙ. WordPress хранит данные загрузок в таблице wp_posts как пользовательский тип записи attachment каждый раз, когда вы что-то загружаете, независимо от того, используется это где-то или нет.
Matt Royal
Просто интересно, каково назначение post_status? Мой код работает только если я устанавливаю post_status в inherit. Однако вложение, которое я ищу (в моем случае PDF-файл), не было загружено ни на одну страницу. От чего тогда оно наследуется? И почему я не могу просто игнорировать post_status?
A.Shoman
Не работает у меня... Я использую этот рабочий код:
Как показать все медиа-изображения WordPress на странице https://www.arnlweb.com/forums/web-development/how-to-get-all-images-in-a-wordpress-page-from-media-gallery/
Apurba Pathak
$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 может быть хорошим примером для начала изучения.