Удалить изображения, загруженные ролью «Подписчик»

Я унаследовал очень плохо разработанный сайт WordPress, который частично использует BuddyPress для раздела типа каталога. Пользователи могут загружать изображения профиля и изображения продукта в свой профиль.

В результате у нас теперь есть примерно 20 ГБ изображений на сайте и отчаянно нужно сокращать это. Когда пользователи перестают платить членский взнос за благотворительность, выполняющую сайт, роль пользователя изменяется с одной из нескольких пользовательских ролей на роль WP 'Subscriber'.

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

В настоящее время я не пробовал ничего в этом направлении, и я надеюсь, что кто-то, у кого больше опыта работы с WP dev, сможет дать мне несколько советов / советов о том, как подойти к этому.

Заранее спасибо.

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

$subscribers = get_users( array( 'role' => 'subscriber', 'fields'=> 'ID', ) ); if( ! empty( $subscribers ) ) { $files = new WP_Query( array( 'post_type' => 'attachment', 'posts_per_page' => 200, 'author' => implode( ',', $subscribers ), 'fields' => 'ids', ) ); if( ! empty( $files ) ) { foreach( $files->posts as $attachment_id ) { $deleted = wp_delete_attachment( $attachment_id, true ); if( ! $deleted ) { error_log( "Attachment {$deleted} Could Not Be Deleted!" ); } } } } 

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

Вам нужно будет сделать SELECT против wp_posts и wp_users чтобы получить список всех имен файлов, которые квалифицируются. Затем вручную удалите их в папке uploads . Если это на сервере Linux, я бы создал BASH скрипт, чтобы удалить их все сразу.