Как удалить все НЕИСПОЛЬЗУЕМЫЕ изображения из директории uploads?

10 июн. 2014 г., 18:26:29
Просмотры: 77.5K
Голосов: 24

Я пытаюсь очистить мои папки uploads, так как они начинают занимать слишком много места на сервере.

Я пробовал использовать плагины для достижения этой цели, такие как DNUI и Cleanup Images, но эти плагины либо неработоспособны, либо в случае с DNUI (который недавно обновился и работает) не дают именно тех результатов, которые мне нужны. Это связано с тем, что мой сайт использует WooCommerce и тему, которые используют изображения в других местах, а не только в записях или на страницах, например, в шапке, подвале и галереях. Похоже, что WooCommerce использует свой встроенный плагин Lightbox под названием Pretty Photo, откуда и загружаются изображения, которые DNUI помечает как "неиспользуемые".

Я понимаю, что это непростая задача, но я хотел бы узнать, может ли кто-нибудь указать мне правильное направление? Я не разработчик, поэтому, вероятно, мне даже не стоит писать здесь, но я могу разобраться со временем и при должном усердии. Я видел скрипты на этом сайте, которые дают те же результаты, что и плагин DNUI, но ничего, что учитывало бы другие способы использования изображений (если это вообще возможно?). Буду благодарен за любую помощь.

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

Я тоже хотел сделать то же самое, но меня беспокоит, как определить неиспользуемые изображения. Например, автор мог загрузить изображения в черновик поста, затем создать другой черновик, вставить туда контент, и именно этот пост был опубликован. Это означает, что изображения привязаны к черновику, а не к опубликованному посту. Возможно, нужен скрипт, который проверит все посты и найдет URL изображений, чтобы определить, какие из них используются, а какие нет. Надеюсь, у нас будет хорошее решение.

Christine Cooper Christine Cooper
10 июн. 2014 г. 19:14:37

К сожалению, чем сложнее ваше определение "неиспользуемых" изображений, тем меньше шансов найти подходящее решение. О каком количестве изображений (и их размерах) идет речь?

Rarst Rarst
10 июн. 2014 г. 20:48:23

Привет, Rarst, спасибо за ответ. Сайт работает уже около 5 лет и сильно зависит от изображений, с множеством смен тем и плагинов. Я уверен, что там буквально тысячи неиспользуемых изображений. Из-за всех изменений их размеры очень сильно различаются. Я уже использовал Force Regenerate Thumbnails, чтобы попытаться уменьшить их количество, и это частично помогло, но плагин часто зависает из-за большого объема. Кроме того, он нагружает сервер до нерабочего состояния, если оставить его включенным.

G-Olly G-Olly
11 июн. 2014 г. 11:44:55

Я понимаю сложность проблемы и поэтому использовал медиатеку, чтобы попытаться определить и удалить эти изображения. К сожалению, я обнаружил, что она часто помечает используемые файлы как неиспользуемые и наоборот, поэтому процесс идет мучительно медленно, но я уже взялся за работу всерьез.

G-Olly G-Olly
11 июн. 2014 г. 12:06:12

Если можно вставить свои пять копеек, для некоторых типов сайтов проблему можно решить эмпирически. На таких сайтах веб-краулеры посещают каждую страницу. Из логов сервера можно получить список URL всех посещенных страниц. Разобрать эти страницы с помощью DOMDocument и получить все элементы <img> и их src. Проблема этого подхода в том, если href и src генерируются динамически через Javascript.

User User
15 авг. 2014 г. 15:44:24

Почти все эти плагины не проверяют изображения ACF. В Media Cleaner есть pro-версия, которая проверяет ACF.

chiterry27 chiterry27
16 окт. 2019 г. 20:43:16

Вам стоит попробовать плагин Media Hygiene для WordPress. Плагин Media Hygiene удаляет неиспользуемые медиафайлы из библиотеки WordPress, чтобы освободить место, уменьшить беспорядок и улучшить производительность сервера. С такими функциями, как массовое удаление и глубокое сканирование папок, это обязательный инструмент для поиска и удаления неиспользуемых изображений и медиафайлов.

Ссылка на плагин здесь https://mediahygiene.com

Deepak Lakhara Deepak Lakhara
21 июл. 2023 г. 13:21:18
Показать остальные 2 комментариев
Все ответы на вопрос 5
2

Удаление изображений с помощью плагина:

Вы можете использовать этот плагин, который просканирует вашу базу данных и проверит, используется ли изображение в каких-либо записях (в контенте, как миниатюра, в любых произвольных полях и т.д.) или в качестве фона...

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

https://wordpress.org/plugins/dnui-delete-not-used-image-wordpress/

А также этот плагин, который всё ещё работает, несмотря на то, что устарел:

https://wordpress.org/plugins/wordpress-uploaded-files-cleaner/


Ручное удаление изображений:

Вы также можете вручную найти в медиатеке изображения, которые не прикреплены к записям и страницам.

Перейдите в медиатеку и нажмите на вкладку "Не прикрепленные" — это отобразит все изображения, которые могут использоваться в других разделах сайта или не использоваться вовсе.

15 авг. 2014 г. 10:32:21
Комментарии

Проблема с изображениями, которые не прикреплены ни к одному посту, заключается в том, что они могут использоваться в другом месте — например, если у вас есть произвольное поле, использующее загрузчик изображений на основе стандартного медиазагрузчика WordPress. В зависимости от того, как была закодирована тема, загруженное изображение не прикрепляется ни к одному посту (в вашей базе данных). Тем не менее, это валидная идея.

Bruno Monteiro Bruno Monteiro
18 июн. 2015 г. 16:20:49

Я поддержу здесь @BrunoMonteiro. Вполне возможно иметь изображения, которые не прикреплены к посту.

BODA82 BODA82
11 окт. 2015 г. 04:46:06
0

Cron/Планировщик задач и обход базы данных — ваши друзья

Для этого потребуется плагин, которому можно даже назначить интервал выполнения через wp_cron, что-то похожее на предложенное выше, но с дополнительной проверкой полей типа 'post_content' (вам нужно будет определить их в зависимости от вашей среды WordPress) на наличие URI/URL изображений. Это может быть крайне ресурсоемким и нагружать систему — на практике такой процесс достаточно запускать раз в день или неделю, если нет юридических или бизнес-причин делать это чаще.

Использование мастер-слейв конфигурации базы данных может значительно снизить нагрузку, но это уже выходит за рамки данного вопроса.

6 дек. 2015 г. 16:47:47
0

Я попробовал плагин Image Cleanup, и он действительно лучший, но всё же лучше сначала сделать резервную копию.

6 дек. 2015 г. 17:48:13
2

Вам потребуется просканировать папку wp-content/uploads на наличие загруженных файлов, затем проверить базу данных на ссылки на эти файлы и, наконец, сопоставить их. То, что не удалось сопоставить, можно безопасно удалить.

Сканирование базы данных — это самая сложная часть. Большинство ссылок на файлы хранятся в Медиатеке, доступ к которой можно получить с помощью стандартных функций/API WordPress. Но что делать с файлами, которые были удалены из Медиатеки, но всё ещё упоминаются в записях? Или с файлами, на которые ссылаются другие плагины разными способами?

Я провел значительное количество тестов и выяснил, что все ссылки на файлы хранятся либо в формате обычного текста (т.е. просто ячейка таблицы, содержащая путь или URL файла), HTML-формате (т.е. в содержимом записи), в сериализованных данных или, наконец, в виде JSON-объектов. Вам придется просканировать всю базу данных и попытаться определить, какой формат используется в каждой ячейке. Конечно, могут быть и другие экзотические способы, которые некоторые плагины используют для хранения ссылок на свои файлы, но их можно обработать только в индивидуальном порядке.

В итоге я написал плагин, который автоматически выполняет все эти действия, так как он понадобился мне для некоторых сайтов клиентов, и назвал его Theia Upload Cleaner. Он хорошо зарекомендовал себя, но, конечно, перед использованием подобных инструментов всегда стоит делать резервную копию.

23 мар. 2016 г. 20:19:10
Комментарии

Хороший подход... Интересно, сталкивались ли вы с какими-либо проблемами при добавлении большего количества контента, плагинов и записей со временем...

red-o-alf red-o-alf
13 июн. 2018 г. 11:24:46

Да, тут и там возникают проблемы. Например, для некоторых плагинов необходимо исключить определенные таблицы, которые могут значительно замедлить процесс. Мы стараемся автоматически исключать таблицы по определенным ключевым словам, таким как таблицы с "log" (журналами), но, конечно, это не охватывает все случаи.

liviucmg liviucmg
13 июн. 2018 г. 17:21:39
0

Плагин Media Cleaner для WordPress достаточно хорош — https://wordpress.org/plugins/media-cleaner/

Мне нравится, что он поддерживает другие плагины, такие как Advanced Custom Fields (ACF), Divi Builder, Visual Composer и Elementor. (Только в платной версии)

21 дек. 2019 г. 23:53:50