Скрипт для получения списка всех открепленных изображений?

10 нояб. 2010 г., 20:44:38
Просмотры: 1.03K
Голосов: 2

В моем файле functions.php мне нужно получить список всех изображений в папке uploads, которые в данный момент не прикреплены к записям в базе данных WordPress.

Похоже, что каждый раз, когда изображение загружается в папку uploads WordPress (через FTP или через Медиабиблиотеку), в базе данных WP создается запись, верно?

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

2
Комментарии

Просто интересно, это как-то связано с вашим другим вопросом? Если да, то думаю, есть плагин, который добавляет все несвязанные файлы из wp-uploads в медиатеку как неприкреплённые/отсоединённые записи в базе данных.

hakre hakre
11 нояб. 2010 г. 02:14:19

Hakre, ты имеешь в виду.. http://wordpress.org/extend/plugins/add-from-server/

t31os t31os
11 нояб. 2010 г. 16:19:01
Все ответы на вопрос 2
10

Это должно работать:

$args = array(
    'post_type' => 'attachment', // Тип записи - вложение
    'numberposts' => -1, // Количество постов (-1 - все)
    'post_status' => null, // Статус поста
    'post_parent' => 0 // Родительский пост (0 - без родителя)
); 
$attachments = get_posts($args); // Получаем все вложения

if ($attachments) {
    foreach ($attachments as $post) {
        setup_postdata($post);
        the_attachment_link($post->ID); // Выводим ссылку на вложение
    }
}
10 нояб. 2010 г. 23:36:16
Комментарии

@sorich: Большое спасибо. Это определенно приближает меня к решению. Однако возвращается немного больше данных, чем мне нужно. Например, кажется, что само изображение содержится в ["guid"]=> string(59) "http://localhost/mysite/wp-content/uploads/theImage.png", и это именно та часть, которая мне нужна. Есть ли способ вызвать get_posts и получить только значение "guid"?

Scott B Scott B
14 нояб. 2010 г. 01:45:03

Я бы не рекомендовал использовать guid, так как он не предназначен для использования в качестве ссылки. Формат guid может измениться в будущем (http://core.trac.wordpress.org/ticket/6492). Вместо этого следует использовать the_attachment_link($post->ID, false), например, чтобы получить ссылку на изображение.

sorich87 sorich87
14 нояб. 2010 г. 12:51:49

В WordPress 3.1 появится возможность получать только одно поле с помощью get_posts: http://core.trac.wordpress.org/ticket/14777. Пока же можно использовать фильтр posts_fields.

sorich87 sorich87
14 нояб. 2010 г. 12:54:29

Это не так, патч не указывает, что можно вернуть только одно поле, он расширяет get_posts, позволяя выбирать указанные поля, а не просто возвращать все. Это приводит get_posts в соответствие с другими функциями, которые поддерживают такую возможность (одним из примеров может быть get_terms).

t31os t31os
14 нояб. 2010 г. 14:23:56

@t31os: исходя из вашего объяснения, я не понимаю, почему то, что я сказал, неверно. Я не говорил, что всегда будет возвращаться только одно поле. В чем разница между "может быть возвращено только одно поле" и "позволяет выбирать указанные поля" (если я могу выбрать, например, только одно поле)? Я что-то упускаю?

sorich87 sorich87
14 нояб. 2010 г. 17:29:24

@sorich - Вы сказали: "вы сможете получить только одно поле с помощью get_posts" ... но вы можете получить несколько полей, если захотите, никаких ограничений нет.. (может быть, вы просто неудачно сформулировали комментарий?)

t31os t31os
14 нояб. 2010 г. 20:15:47

@sorich: Как я могу интегрировать the_attachment_link($post->ID, false) в ваш код ответа? Я просто использую ['guid'], потому что именно так возвращается ссылка на изображение вложения при использовании get_posts().

Scott B Scott B
14 нояб. 2010 г. 20:19:45

@t31os: Извините, я не знал, что фраза 'be able to' может интерпретироваться как 'всегда'. Я не носитель английского языка. :)

sorich87 sorich87
15 нояб. 2010 г. 08:32:24

@Scott B: Я отредактировал свой ответ.

sorich87 sorich87
15 нояб. 2010 г. 08:37:24

@sorich - Как я уже сказал, думаю, это просто вопрос формулировки твоего ответа, без проблем, приятель, ничего страшного... ;)

t31os t31os
15 нояб. 2010 г. 11:06:27
Показать остальные 5 комментариев
0

Если вам нужно управлять ими в интерфейсе:

/wp-admin/upload.php?detached=1

Добавьте адрес вашего блога в начале.

Или более описательно:

Войдите в админку, затем используйте меню: Медиафайлы -> Библиотека. Выберите ссылку Неприкрепленные над выпадающим списком фильтров.

11 нояб. 2010 г. 02:10:31