• Интернет магазин. в медиа галерее 60к картинок. По стечению обстоятельств и некой криворукости вышло так что образовались «битые картинки» в медиа галерее картинка есть и прикреплена к товару, но в самой папке uploads картинки нет, соотвецтвенно выводить кроме альта нечего. Решением может быть повторный импорт с обновлением картинок но нету параметра конкретно перезаписать или пропустить те которые нормальные, та и сам импорт без преувеличений 2 дня длится если постараться всё удалить. Так от вопрос
    Как вычислить и удалить Медиа файлы у которых нету соотвецтвующего файла непосредственно в файлах (uploads)

Просмотр 4 ответов — с 1 по 4 (всего 4)
  • Обычно в медиабиблиотеке такие файлы показаны в виде серых, безликих квадратиков, их и надо удалять. Есть плагины для массового удаления медиафайлов. Конечно лучше было бы найти реальные файлы и закачать их в Upload.

    @alexander70 я бы так и сделал если бы у меня не было 65 страничек по 1000 картинок при том что битые рандомно разбросаны по галерее. Было бы хорошо если к таким картинкам приписывался класс от lazy-load — «error» как в каталоге товаров(там где не выходит загрузить дописывается класс). Тогда можно было бы хотя бы через консоль или поиск в просмотре кода обнаружить их чтобы каждую страницу не перелистывать. А так нужно комплексное решение. Я полагаю что можно сделать скрипт получающий с базы данных список медиафайлов после чего сопоставляет ссылки с тем существует ли файл а после в случае надобности проводил удаление но моих навыков тут не хватит

    Модератор Yui

    (@fierevere)

    永子

    https://wordpress.org/plugins/media-cleaner/
    можете попробовать это, хотя скорее всего потребуется его pro версия, попробуйте поинтересоваться у автора плагина

    (@fierevere),(@alexander70) Спасибо господа)
    Всё же я недооценил себя)
    Вот скрипт решения проблемы. Впихнул на исполнение после тестов прямо в page.php

    Сначала получаем все медиа. После сверяем на наличие в директоии uploads, чего нету изничтожаем то атомов, эврика!)

    $args = array(
        'post_type' => 'attachment',
        'numberposts' => -1,
        'post_status' => null,
        'post_parent' => null, // any parent
        ); 
    $attachments = get_posts($args);
    if ($attachments) {
    	$problems = array();
    	foreach($attachments as $attachment):
    		
    // Путь к картинке
    $file = "wp-content/uploads/".get_post_meta( $attachment->ID, '_wp_attached_file', true );
    
          // Проверяем наличие в файлах (Если нет, удаляем медиа)
    		if(!file_exists(''.$file.'') && $attachment->ID != 5){
    			wp_delete_attachment( $attachment->ID );
    			echo "Deleted";
    			$problems[] =
    			[
    				'id' => $attachment->ID,
    				'name' => $attachment->post_title,
    			];
    		}
    	endforeach;
    
            //(var_dump) Проводим отладку, инспектируем удалённые записи
    	get_vd($problems);
    }
    
Просмотр 4 ответов — с 1 по 4 (всего 4)
  • Тема «Удаление медиа не имеющих существующих Uploads» закрыта для новых ответов.