Массовое удаление устаревших товаров  в 1с-Битрикс


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

Приведенный ниже скрипт позволяет удалить товары (а также любые другие элементы инфоблока), созданные ранее указанного периода, вместе с изображениями:

<?php
$IBLOCK_ID = 1; // id инфоблока товаров для обработки
$FILTER_DATE_INTERVAL = '-3 months'; // период проверки создания (будут обработаны и удалены товары, созданные ранее) 

require($_SERVER["DOCUMENT_ROOT"] . "/bitrix/modules/main/include/prolog_before.php");
\Bitrix\Main\Loader::includeModule('iblock');
\Bitrix\Main\Loader::IncludeModule('disk');

$filterDate = new \Bitrix\Main\Type\DateTime();
$filterDate->add($FILTER_DATE_INTERVAL);

$rsElements = CIblockElement::GetList(
    array('ID' => 'ASC'),
    array(
        'IBLOCK_ID' => $IBLOCK_ID,
        '<DATE_CREATE' => $filterDate,
    ),
    false,
    array(),
    array(
        'ID',
        'DATE_CREATE',
        'PREVIEW_PICTURE',
        'DETAIL_PICTURE',
        // 'PROPERTY_MORE_PHOTO'
    )
);


$deleteCheck =  false;
while ($arElement = $rsElements->GetNext()) {
    $deleteCheck =  true;

    // удаляем товар 
    CIBlockElement::Delete($arElement['ID']);

    // удаляем картинки 
    if ($arElement['PREVIEW_PICTURE']) {
        $rsFile = CFile::GetByID($arElement['PREVIEW_PICTURE']);
        $arFile = $rsFile->Fetch();
        // (CFile::Delete($arElement['PREVIEW_PICTURE']); 
        if (file_exists($_SERVER['DOCUMENT_ROOT'] . $arFile['SRC'])) unlink($_SERVER['DOCUMENT_ROOT'] . $arFile['SRC']);
    }

    if ($arElement['DETAIL_PICTURE']) {
        $rsFile = CFile::GetByID($arElement['DETAIL_PICTURE']);
        $arFile = $rsFile->Fetch();
        // CFile::Delete($arElement['DETAIL_PICTURE']); 
        if (file_exists($_SERVER['DOCUMENT_ROOT'] . $arFile['SRC'])) unlink($_SERVER['DOCUMENT_ROOT'] . $arFile['SRC']);
    }

    $morePhotos = CIBlockElement::GetProperty($IBLOCK_ID, $arElement['ID'], "sort", "asc", array('CODE' => 'MORE_PHOTO'));
    while ($mp = $morePhotos->GetNext()) {
        $rsFile = CFile::GetByID($mp['VALUE']);
        $arFile = $rsFile->Fetch();
        // CFile::Delete($mp['VALUE']); 
        if (file_exists($_SERVER['DOCUMENT_ROOT'] . $arFile['SRC'])) unlink($_SERVER['DOCUMENT_ROOT'] . $arFile['SRC']);
    }

    print($arElement['ID'] . ' deleted' . '<br>');
}

if (!$deleteCheck)  print('Products to delete not found!');

Проверялось на 1с-Битрикс: Управление сайтом 20.0.1650. (версия модуля интернет-магазин 20.0.687).